Bug 107309

Summary: libGL error: MESA-LOADER: failed to retrieve device information on virgl
Product: DRI Reporter: Vasilis LIaskovitis <vliaskovitis>
Component: libdrmAssignee: Default DRI bug account <dri-devel>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: medium CC: emil.l.velikov
Version: XOrg git   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:
Attachments:
Description Flags
xf86drm: Correctly parse pci device information for virtio gpu none

Description Vasilis LIaskovitis 2018-07-20 13:28:52 UTC
Created attachment 140732 [details] [review]
xf86drm: Correctly parse pci device information for virtio gpu

Mesa 18.1.3-201.1
kernel 4.17.5-1-default
libdrm 2.4.92-1.2
 
glxinfo | grep -i renderer
OpenGL renderer string: virgl
 
LIBGL_DEBUG=verbose glxgears
libGL error: MESA-LOADER: failed to retrieve device information
libGL: using driver virtio_gpu for 4
libGL: OpenDriver: trying /usr/lib64/dri/tls/virtio_gpu_dri.so
libGL: OpenDriver: trying /usr/lib64/dri/virtio_gpu_dri.so
 
Adding some debug drmMsg() prints, I found that the MESA-LOADER error message happens because drmGetDevice2() returns -ENODEV. And that happens because drmParseSubsystemType() returns -EINVAL.
 
drmParseSubsystemType() expects /sys/dev/char/DRM_MAJOR\:0/device/subsystem to be one of pci, usb, platform, hostix. But virtio-gpu has bus subsystem virtio:
 
ls -al /sys/dev/char/226\:0/device/subsystem
lrwxrwxrwx 1 root root 0 Jul 19 17:39 /sys/dev/char/226:0/device/subsystem -> ../../../../bus/virtio
 
ls -al /sys/dev/char/226\:128/device/subsystem
lrwxrwxrwx 1 root root 0 Jul 19 17:39 /sys/dev/char/226:128/device/subsystem -> ../../../../bus/virtio

I am not sure if this is a cosmetic error, or if it matters. I am attaching a proposed patch.

Since the virtio-gpu device is actually a pci device, we can still parse the correct information from the corresponding pci device:
 
ls -al /sys/dev/char/226\:0
lrwxrwxrwx 1 root root 0 Jul 20 13:30 /sys/dev/char/226:0 -> ../../devices/pci0000:00/0000:00:02.0/virtio0/drm/card0

i.e. use /sys/dev/char/226\:128/../../../ instead of /sys/dev/char/226\:128/ for virtio devices.

to parse subsystem, and subsequently pci bus and pci device information.

(Let me know if bugzilla is still the place to report bugs, or if  https://gitlab.freedesktop.org/mesa/drm is now the preferred location)
Comment 1 Emil Velikov 2018-07-24 15:35:57 UTC
The message is harmless since Mesa falls back to use the DRM driver name.

That said, a slightly better (I'm obviously biased) solution has been on the list for ~month [1]. Just double-checked and pushed it to master.

[1] https://lists.freedesktop.org/archives/dri-devel/2018-June/181067.html
Comment 2 Vasilis LIaskovitis 2018-07-24 17:26:14 UTC
Cool, thanks!

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.