Re: [PATCH v2 07/11] video/aperture: Disable and unregister sysfb devices via aperture helpers
From: Samuel Čavoj <hidden>
Date: 2023-03-20 01:57:41
Also in:
dri-devel, linux-staging
Hi,
quoted hunk ↗ jump to hunk
diff --git a/drivers/video/aperture.c b/drivers/video/aperture.c index f42a0d8bc211..101e13c2cf41 100644 --- a/drivers/video/aperture.c +++ b/drivers/video/aperture.c@@ -8,6 +8,7 @@ #include <linux/pci.h> #include <linux/platform_device.h> #include <linux/slab.h> +#include <linux/sysfb.h> #include <linux/types.h> #include <linux/vgaarb.h>@@ -286,7 +287,20 @@ intaperture_remove_conflicting_devices(resource_size_t base, resource_size_t si #if IS_REACHABLE(CONFIG_FB) struct apertures_struct *a; int ret; +#endif + + /* + * If a driver asked to unregister a platform device registered by + * sysfb, then can be assumed that this is a driver for a display + * that is set up by the system firmware and has a generic driver. + * + * Drivers for devices that don't have a generic driver will never + * ask for this, so let's assume that a real driver for the display + * was already probed and prevent sysfb to register devices later. + */ + sysfb_disable();
This call to sysfb_disable() has been causing trouble with regard to VFIO. VFIO has been calling aperture_remove_conflicting_pci_devices to get rid of any console drivers (d173780620792c) using the device in question, but now even unrelated drivers are getting killed. Example situation: Machine has two GPUs and uses efifb for the console. Efifb registers with the aperture system the efi framebuffer region, which is covered by a BAR resource of GPU 1. VFIO grabs GPU 2 and calls aperture_remove_conflicting_pci_devices(GPU 2). GPU 2 has no overlap with the efifb on GPU1 but the efifb is killed regardless due to the unconditional call to sysfb_disable(). The console switches to dummy and locks up from the user perspective. This seems unnecessary, as the device is unrelated. I do not quite understand the comment justifying the call. Some discussions with workarounds: https://old.reddit.com/r/VFIO/comments/11qei4t/framebuffer_doesnt_work_anymore_after_passthrough/ https://bbs.archlinux.org/viewtopic.php?id=280512 Thanks, Samuel