From 728b54528d37ffa27b07c9b181c5ed8d2d359379 Mon Sep 17 00:00:00 2001 From: Tj Date: Fri, 19 Jul 2024 19:50:56 +0200 Subject: [PATCH] xfree86: fbdevhw: fix pci detection on recent Linux Linux kernel v6.9 has changed the symlink to point to the parent device. This breaks fbdev_open() detection logic. Change it to use the subsystem symlink instead which will remain stable. Kernel v6.8: [ 14.067] (II) fbdev_open() sysfs_path=/sys/class/graphics/fb0 [ 14.067] (II) fbdev_open() buf=../../devices/platform/vesa-framebuffer.0/graphics/fb0 Kernel v6.9: [ 15.609] (II) fbdev_open() sysfs_path=/sys/class/graphics/fb0 [ 15.609] (II) fbdev_open() buf=../../devices/pci0000:00/0000:00:01.0/vesa-framebuffer.0/graphics/fb0 Originally found in automated Debian ISO QA testing [0] and confirmed in Linux [1]. Tested on kernels v6.9.7 and v6.8.12 [0] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1075713 [1] https://lore.kernel.org/lkml/lLyvPFC_APGHNfyGNHRpQy5izBikkaTPOpHooZIT3fFAoJPquSI31ZMueA99XTdr8ysir3X7O7IMdc6za-0m79vr_claeparHhoRouVgHOI=@proton.me/ Fixes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1714 Signed-off-by: Tj Reviewed-by: Thomas Zimmermann Reviewed-by: Enrico Weigelt, metux IT consult Part-of: --- hw/xfree86/fbdevhw/fbdevhw.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c index 1e39c8146..92cac3f4a 100644 --- a/hw/xfree86/fbdevhw/fbdevhw.c +++ b/hw/xfree86/fbdevhw/fbdevhw.c @@ -378,9 +378,9 @@ fbdev_open(int scrnIndex, const char *dev, char **namep) node++; } - if (asprintf(&sysfs_path, "/sys/class/graphics/%s", node) < 0 || + if (asprintf(&sysfs_path, "/sys/class/graphics/%s/device/subsystem", node) < 0 || readlink(sysfs_path, buf, sizeof(buf) - 1) < 0 || - strstr(buf, "devices/pci")) { + strstr(buf, "bus/pci")) { free(sysfs_path); close(fd); return -1;