Re: [PATCH v2] x86/video: Only fall back to vga_default_device() without screen info

From: Thomas Zimmermann

Date: Wed Jun 24 2026 - 02:09:08 EST


Hi

Am 23.06.26 um 16:15 schrieb Mario Limonciello:
Some multi GPU systems may have a VGA compatible device, but that might
not be used for display. If due to enumeration order this device is
found before the one actually used for display then multiple devices
may show the boot_display attribute, confusing userspace.

When screen info is valid, use it exclusively to find the primary
device so that only the device backing the framebuffer is reported.
Only when no framebuffer has been set up does it make sense to fall
back to the default VGA device. This ensures at most one primary
graphics device, preferably the one with the framebuffer.

Suggested-by: Thomas Zimmermann <tzimmermann@xxxxxxx>
Fixes: ad90860bd10ee ("fbcon: Use screen info to find primary device")
Reported-by: Aaron Ma <aaron.ma@xxxxxxxxxxxxx>
Closes: https://lore.kernel.org/linux-pci/20260618081803.2790848-1-aaron.ma@xxxxxxxxxxxxx/#t
Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx>

Reviewed-by: Thomas Zimmermann <tzimmermann@xxxxxxx>

This looks good. Thanks for fixing this issue.

Best regards
Thomas

---
v1->v2:
* Fix subject
* Keep vga_default_device() as fallback instead of remove all
together
arch/x86/video/video-common.c | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/arch/x86/video/video-common.c b/arch/x86/video/video-common.c
index 152789f00fcda..8ed82fff7638e 100644
--- a/arch/x86/video/video-common.c
+++ b/arch/x86/video/video-common.c
@@ -43,21 +43,26 @@ bool video_is_primary_device(struct device *dev)
if (!pci_is_display(pdev))
return false;
- if (pdev == vga_default_device())
- return true;
-
#ifdef CONFIG_SCREEN_INFO
numres = screen_info_resources(si, res, ARRAY_SIZE(res));
- for (i = 0; i < numres; ++i) {
- if (!(res[i].flags & IORESOURCE_MEM))
- continue;
+ if (numres > 0) {
+ for (i = 0; i < numres; ++i) {
+ if (!(res[i].flags & IORESOURCE_MEM))
+ continue;
+
+ if (pci_find_resource(pdev, &res[i]))
+ return true;
+ }
- if (pci_find_resource(pdev, &res[i]))
- return true;
+ return false;
}
#endif
- return false;
+ /*
+ * No framebuffer was set up by the firmware/bootloader, so fall back
+ * to the default VGA device.
+ */
+ return pdev == vga_default_device();
}
EXPORT_SYMBOL(video_is_primary_device);

--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)