drm render nodes have the same major as drm primary devices but have a minor offset.
render nodes have a name that reflects the minor node not offset by the base. I expected it to be the other way around when these non-linux codepaths were added (before we had render nodes). Index: xf86drm.c =================================================================== RCS file: /cvs/xenocara/lib/libdrm/xf86drm.c,v retrieving revision 1.34 diff -u -p -r1.34 xf86drm.c --- xf86drm.c 26 Apr 2019 07:45:37 -0000 1.34 +++ xf86drm.c 12 May 2019 02:45:41 -0000 @@ -2931,7 +2931,7 @@ static char *drmGetMinorNameForFD(int fd char buf[PATH_MAX + 1]; const char *dev_name; unsigned int maj, min; - int n, base; + int n; if (fstat(fd, &sbuf)) return NULL; @@ -2956,11 +2956,7 @@ static char *drmGetMinorNameForFD(int fd 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; @@ -3854,7 +3850,7 @@ drm_public int drmGetDevice2(int fd, uin 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; @@ -3886,11 +3882,7 @@ drm_public int drmGetDevice2(int fd, uin 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)) @@ -4110,7 +4102,7 @@ drm_public char *drmGetDeviceNameFromFd2 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; @@ -4139,11 +4131,7 @@ drm_public char *drmGetDeviceNameFromFd2 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;