OSDN Git Service

xf86drm: open correct render node on non-linux
authorJonathan Gray <jsg@jsg.id.au>
Sun, 12 May 2019 16:52:04 +0000 (02:52 +1000)
committerEric Engestrom <eric.engestrom@intel.com>
Wed, 3 Jul 2019 11:28:15 +0000 (12:28 +0100)
drm render nodes have the same major as drm primary devices but offset
the minor by a base of 128.

I expected the name of the device to have numbering starting at 0 when
these non-linux codepaths were added (before OpenBSD had render nodes).

Signed-off-by: Jonathan Gray <jsg@jsg.id.au>
Acked-by: Eric Engestrom <eric.engestrom@intel.com>
xf86drm.c

index 39a8206..3362430 100644 (file)
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -2904,7 +2904,7 @@ static char *drmGetMinorNameForFD(int fd, int type)
     char buf[PATH_MAX + 1];
     const char *dev_name;
     unsigned int maj, min;
-    int n, base;
+    int n;
 
     if (fstat(fd, &sbuf))
         return NULL;
@@ -2929,11 +2929,7 @@ static char *drmGetMinorNameForFD(int fd, int type)
         return NULL;
     };
 
-    base = drmGetMinorBase(type);
-    if (base < 0)
-        return NULL;
-
-    n = snprintf(buf, sizeof(buf), dev_name, DRM_DIR_NAME, min - base);
+    n = snprintf(buf, sizeof(buf), dev_name, DRM_DIR_NAME, min);
     if (n == -1 || n >= sizeof(buf))
         return NULL;
 
@@ -3827,7 +3823,7 @@ drm_public int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device)
     char             node[PATH_MAX + 1];
     const char      *dev_name;
     int              node_type, subsystem_type;
-    int              maj, min, n, ret, base;
+    int              maj, min, n, ret;
 
     if (fd == -1 || device == NULL)
         return -EINVAL;
@@ -3859,11 +3855,7 @@ drm_public int drmGetDevice2(int fd, uint32_t flags, drmDevicePtr *device)
         return -EINVAL;
     };
 
-    base = drmGetMinorBase(node_type);
-    if (base < 0)
-        return -EINVAL;
-
-    n = snprintf(node, PATH_MAX, dev_name, DRM_DIR_NAME, min - base);
+    n = snprintf(node, PATH_MAX, dev_name, DRM_DIR_NAME, min);
     if (n == -1 || n >= PATH_MAX)
       return -errno;
     if (stat(node, &sbuf))
@@ -4083,7 +4075,7 @@ drm_public char *drmGetDeviceNameFromFd2(int fd)
     char             node[PATH_MAX + 1];
     const char      *dev_name;
     int              node_type;
-    int              maj, min, n, base;
+    int              maj, min, n;
 
     if (fstat(fd, &sbuf))
         return NULL;
@@ -4112,11 +4104,7 @@ drm_public char *drmGetDeviceNameFromFd2(int fd)
         return NULL;
     };
 
-    base = drmGetMinorBase(node_type);
-    if (base < 0)
-        return NULL;
-
-    n = snprintf(node, PATH_MAX, dev_name, DRM_DIR_NAME, min - base);
+    n = snprintf(node, PATH_MAX, dev_name, DRM_DIR_NAME, min);
     if (n == -1 || n >= PATH_MAX)
       return NULL;