diff mbox series

[libdrm] xf86drm: Make drmNodeIsDRM() public.

Message ID 20181120043008.3576-1-christopher.halse.rogers@canonical.com (mailing list archive)
State New, archived
Headers show
Series [libdrm] xf86drm: Make drmNodeIsDRM() public. | expand

Commit Message

Christopher James Halse Rogers Nov. 20, 2018, 4:30 a.m. UTC
I have wanted this code in Mir, so it's plausibly useful elsewhere,
particularly if the DRM device major number is going to become
dynamic.

Signed-off-by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
---
 xf86drm.c | 2 +-
 xf86drm.h | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

Comments

Emil Velikov Dec. 17, 2018, 6:03 p.m. UTC | #1
Hi Christopher,

On Tue, 20 Nov 2018 at 04:30, Christopher James Halse Rogers
<christopher.halse.rogers@canonical.com> wrote:
>
> I have wanted this code in Mir, so it's plausibly useful elsewhere,
> particularly if the DRM device major number is going to become
> dynamic.
>
Can you elaborate/link to the code that uses the major/minor?
Fiddling with those manually is rather error prone most often than not.

Thanks
Emil
Eric Anholt Dec. 17, 2018, 7:59 p.m. UTC | #2
Emil Velikov <emil.l.velikov@gmail.com> writes:

> Hi Christopher,
>
> On Tue, 20 Nov 2018 at 04:30, Christopher James Halse Rogers
> <christopher.halse.rogers@canonical.com> wrote:
>>
>> I have wanted this code in Mir, so it's plausibly useful elsewhere,
>> particularly if the DRM device major number is going to become
>> dynamic.
>>
> Can you elaborate/link to the code that uses the major/minor?
> Fiddling with those manually is rather error prone most often than not.

Yeah, I think this shouldn't be part of the API.
Christopher James Halse Rogers Dec. 18, 2018, 6:42 a.m. UTC | #3
On 18 December 2018 5:03:22 am AEDT, Emil Velikov <emil.l.velikov@gmail.com> wrote:
>Hi Christopher,
>
>On Tue, 20 Nov 2018 at 04:30, Christopher James Halse Rogers
><christopher.halse.rogers@canonical.com> wrote:
>>
>> I have wanted this code in Mir, so it's plausibly useful elsewhere,
>> particularly if the DRM device major number is going to become
>> dynamic.
>>
>Can you elaborate/link to the code that uses the major/minor?
>Fiddling with those manually is rather error prone most often than not.

We have an internal API that mirrors that of logind - taking a (major,minor) pair and returning a usable fd. For input devices, that just means opened O_NONBLOCK; for DRM devices it means calling SetMaster.

Here's the relevant (non-logind) implementation: https://github.com/MirServer/mir/blob/master/src/server/console/linux_virtual_terminal.cpp#L634

Since we by necessity end up pulling out the devnode I guess we could match on a /dev/dri prefix instead. I just noticed this function while doing the drmIsMaster patch and thought it would be convenient for us!
diff mbox series

Patch

diff --git a/xf86drm.c b/xf86drm.c
index 10df682b..f32cb1bb 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -2767,7 +2767,7 @@  drm_public char *drmGetDeviceNameFromFd(int fd)
     return strdup(name);
 }
 
-static bool drmNodeIsDRM(int maj, int min)
+drm_public bool drmNodeIsDRM(int maj, int min)
 {
 #ifdef __linux__
     char path[64];
diff --git a/xf86drm.h b/xf86drm.h
index 7773d71a..6dc92180 100644
--- a/xf86drm.h
+++ b/xf86drm.h
@@ -37,6 +37,7 @@ 
 #include <stdarg.h>
 #include <sys/types.h>
 #include <stdint.h>
+#include <stdbool.h>
 #include <drm.h>
 
 #if defined(__cplusplus)
@@ -783,6 +784,8 @@  extern int drmPrimeFDToHandle(int fd, int prime_fd, uint32_t *handle);
 extern char *drmGetPrimaryDeviceNameFromFd(int fd);
 extern char *drmGetRenderDeviceNameFromFd(int fd);
 
+extern bool drmNodeIsDRM(int major, int minor);
+
 #define DRM_BUS_PCI       0
 #define DRM_BUS_USB       1
 #define DRM_BUS_PLATFORM  2