On Tuesday, 2018-08-14 10:05:06 +0100, Emil Velikov wrote: > From: Emil Velikov <emil.veli...@collabora.com> > > Replace the manual handling of /dev/dri in favor of the drmDevice API. > The latter provides a consistent way of enumerating the devices, > providing device details as needed. > > v2: > - Use ARRAY_SIZE (Frank) > - s/famour/favor/ typo (Frank) > - Make MAX_DRM_DEVICES a macro - fix vla errors (RobF) > - Remove left-over dev_path instance (RobF) > > Cc: Robert Foss <robert.f...@collabora.com> > Cc: Tomasz Figa <tf...@chromium.org> > Signed-off-by: Emil Velikov <emil.veli...@collabora.com> > Reviewed-by: Robert Foss <robert.f...@collabora.com> (v1) > --- > If using VGEM the following patch is needed [1]. It's been on the list > for ages - will double-check and commmit it to drm-misc. > > [1] https://lists.freedesktop.org/archives/dri-devel/2018-March/170944.html > --- > src/egl/drivers/dri2/platform_android.c | 28 +++++++++++-------------- > 1 file changed, 12 insertions(+), 16 deletions(-) > > diff --git a/src/egl/drivers/dri2/platform_android.c > b/src/egl/drivers/dri2/platform_android.c > index cc16fd8118f..b83c76e60df 100644 > --- a/src/egl/drivers/dri2/platform_android.c > +++ b/src/egl/drivers/dri2/platform_android.c > @@ -1289,7 +1289,8 @@ cleanup: > static int > droid_open_device(_EGLDisplay *disp) > { > - const int MAX_DRM_DEVICES = 32; > +#define MAX_DRM_DEVICES 32 > + drmDevicePtr device, devices[MAX_DRM_DEVICES] = { NULL };
That int was never used until now; and still isn't after your patch, save for this one declaration. How about simply `devices[32]` and drop the #define & #undef? (Feel free to ignore, this isn't important at all) > int prop_set, num_devices; > int fd = -1, fallback_fd = -1; > > @@ -1299,26 +1300,20 @@ droid_open_device(_EGLDisplay *disp) > if (property_get("drm.gpu.vendor_name", vendor_buf, NULL) > 0) > vendor_name = vendor_buf; > > - const char *drm_dir_name = "/dev/dri"; > - DIR *sysdir = opendir(drm_dir_name); > + num_devices = drmGetDevices2(0, devices, ARRAY_SIZE(devices)); > + if (num_devices < 0) > + return num_devices; > > - if (!sysdir) > - return -errno; > + for (int i = 0; i < num_devices; i++) { > + device = devices[i]; > > - struct dirent *dent; > - while ((dent = readdir(sysdir))) { > - char dev_path[128]; > - const char render_dev_prefix[] = "renderD"; > - size_t prefix_len = sizeof(render_dev_prefix) - 1; > - > - if (strncmp(render_dev_prefix, dent->d_name, prefix_len) != 0) > + if (!(device->available_nodes & (1 << DRM_NODE_RENDER))) > continue; > > - snprintf(dev_path, sizeof(dev_path), "%s/%s", drm_dir_name, > dent->d_name); > - fd = loader_open_device(dev_path); > + fd = loader_open_device(device->nodes[DRM_NODE_RENDER]); > if (fd < 0) { > _eglLog(_EGL_WARNING, "%s() Failed to open DRM device %s", > - __func__, dev_path); > + __func__, device->nodes[DRM_NODE_RENDER]); > continue; > } > > @@ -1341,7 +1336,7 @@ droid_open_device(_EGLDisplay *disp) > } > > success: > - closedir(sysdir); > + drmFreeDevices(devices, num_devices); > > if (fallback_fd < 0 && fd < 0) { > _eglLog(_EGL_WARNING, "Failed to open any DRM device"); > @@ -1355,6 +1350,7 @@ success: > > close(fallback_fd); > return fd; > +#undef MAX_DRM_DEVICES > } > > EGLBoolean > -- > 2.18.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev