diff mbox series

[libdrm] xf86drm: open correct render node on non-linux

Message ID 20190512165204.47554-1-jsg@jsg.id.au (mailing list archive)
State New, archived
Headers show
Series [libdrm] xf86drm: open correct render node on non-linux | expand

Commit Message

Jonathan Gray May 12, 2019, 4:52 p.m. UTC
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>
---
 xf86drm.c | 24 ++++++------------------
 1 file changed, 6 insertions(+), 18 deletions(-)

Comments

Eric Engestrom July 3, 2019, 11:39 a.m. UTC | #1
On Monday, 2019-05-13 02:52:04 +1000, Jonathan Gray wrote:
> 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>

I didn't check that OpenBSD is the way you say, but the libdrm code here
matches with that, so this patch is
Acked-by: Eric Engestrom <eric.engestrom@intel.com>
and pushed :)

> ---
>  xf86drm.c | 24 ++++++------------------
>  1 file changed, 6 insertions(+), 18 deletions(-)
> 
> diff --git a/xf86drm.c b/xf86drm.c
> index 42022cac..0763fd26 100644
> --- a/xf86drm.c
> +++ b/xf86drm.c
> @@ -2931,7 +2931,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;
> @@ -2956,11 +2956,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;
>  
> @@ -3854,7 +3850,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;
> @@ -3886,11 +3882,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))
> @@ -4110,7 +4102,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;
> @@ -4139,11 +4131,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;
>  
> -- 
> 2.21.0
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
Jonathan Gray July 3, 2019, 1:14 p.m. UTC | #2
On Wed, Jul 03, 2019 at 12:39:10PM +0100, Eric Engestrom wrote:
> On Monday, 2019-05-13 02:52:04 +1000, Jonathan Gray wrote:
> > 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>
> 
> I didn't check that OpenBSD is the way you say, but the libdrm code here
> matches with that, so this patch is
> Acked-by: Eric Engestrom <eric.engestrom@intel.com>
> and pushed :)

Thanks for looking over these and pushing.  OpenBSD snapshots have
contained these changes as local patches since I sent the mails out so
not expecting any issues.

We are trying to keep the kernel side as close as possible to the
original linux code.

> 
> > ---
> >  xf86drm.c | 24 ++++++------------------
> >  1 file changed, 6 insertions(+), 18 deletions(-)
> > 
> > diff --git a/xf86drm.c b/xf86drm.c
> > index 42022cac..0763fd26 100644
> > --- a/xf86drm.c
> > +++ b/xf86drm.c
> > @@ -2931,7 +2931,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;
> > @@ -2956,11 +2956,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;
> >  
> > @@ -3854,7 +3850,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;
> > @@ -3886,11 +3882,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))
> > @@ -4110,7 +4102,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;
> > @@ -4139,11 +4131,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;
> >  
> > -- 
> > 2.21.0
> > 
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
diff mbox series

Patch

diff --git a/xf86drm.c b/xf86drm.c
index 42022cac..0763fd26 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -2931,7 +2931,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;
@@ -2956,11 +2956,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;
 
@@ -3854,7 +3850,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;
@@ -3886,11 +3882,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))
@@ -4110,7 +4102,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;
@@ -4139,11 +4131,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;