Commit 8a73372e authored by Vasyl Vavrychuk's avatar Vasyl Vavrychuk Committed by Kristian H. Kristensen

xf86drm: fix subsystem type lookup for virtio mmio-based devices

Currently the code assumes that a virtio based device is always located
on the PCI bus.

Modify the parser to make it check the device's parent directory to
determine on which bus it is located.

Output for virtio-pci is the PCI bus.
Output for virtio-mmio is the Platform bus.
Signed-off-by: default avatarVasyl Vavrychuk <>
Signed-off-by: default avatarMikhail Golubev <>
Reviewed-by: Gurchetan Singh's avatarGurchetan Singh <>
Tested-by: Gurchetan Singh's avatarGurchetan Singh <>
parent c4eae71d
Pipeline #118878 passed with stage
in 1 minute and 14 seconds
......@@ -3005,10 +3005,20 @@ static int drmParseSubsystemType(int maj, int min)
#ifdef __linux__
char path[PATH_MAX + 1] = "";
char real_path[PATH_MAX + 1] = "";
int subsystem_type;
snprintf(path, PATH_MAX, "/sys/dev/char/%d:%d/device", maj, min);
snprintf(path, sizeof(path), "/sys/dev/char/%d:%d/device", maj, min);
if (!realpath(path, real_path))
return -errno;
snprintf(path, sizeof(path), "%s", real_path);
return get_subsystem_type(path);
subsystem_type = get_subsystem_type(path);
if (subsystem_type == DRM_BUS_VIRTIO) {
strncat(path, "/..", PATH_MAX);
subsystem_type = get_subsystem_type(path);
return subsystem_type;
#elif defined(__OpenBSD__) || defined(__DragonFly__)
return DRM_BUS_PCI;
......@@ -3710,7 +3720,6 @@ process_device(drmDevicePtr *device, const char *d_name,
switch (subsystem_type) {
return drmProcessPciDevice(device, node, node_type, maj, min,
fetch_deviceinfo, flags);
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment