egl: Don't add hardware device if there is no render node v2.
authorMathias Fröhlich <Mathias.Froehlich@gmx.net>
Thu, 6 Jun 2019 08:22:25 +0000 (10:22 +0200)
committerMathias Fröhlich <Mathias.Froehlich@gmx.net>
Wed, 19 Jun 2019 05:17:23 +0000 (07:17 +0200)
Do not offer a hardware drm backed egl device if no render node
is available. The current implementation will fail on this
egl device. On top it issues a warning that is actually missleading.
There are finally more error paths that can fail on the way to a
hardware backed egl device. Fixing all of them would kind of require
opening the drm device and see if there is a usable driver associated
with the device. The taken approach avoids a full probe and fixes at
least this kind of problem on kvm virtualization hosts I observe here.

Fixes: dbb4457d985 ("egl: add EGL_EXT_device_drm support")
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
src/egl/main/egldevice.c

index 76b8960fa5b25e9e8491dee36d4a207b827e9040..99d8a6c18861cbb371e90d2a2afc602423f3fd5d 100644 (file)
@@ -108,9 +108,9 @@ static int
 _eglAddDRMDevice(drmDevicePtr device, _EGLDevice **out_dev)
 {
    _EGLDevice *dev;
+   const int wanted_nodes = 1 << DRM_NODE_RENDER | 1 << DRM_NODE_PRIMARY;
 
-   if ((device->available_nodes & (1 << DRM_NODE_PRIMARY |
-                                   1 << DRM_NODE_RENDER)) == 0)
+   if ((device->available_nodes & wanted_nodes) != wanted_nodes)
       return -1;
 
    dev = _eglGlobal.DeviceList;