[PATCH 6.11 514/558] firmware/sysfb: Disable sysfb for firmware buffers with unknown parent

Greg Kroah-Hartman gregkh at linuxfoundation.org
Tue Oct 8 12:09:04 UTC 2024


6.11-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Thomas Zimmermann <tzimmermann at suse.de>

commit ad604f0a4c040dcb8faf44dc72db25e457c28076 upstream.

The sysfb framebuffer handling only operates on graphics devices
that provide the system's firmware framebuffer. If that device is
not known, assume that any graphics device has been initialized by
firmware.

Fixes a problem on i915 where sysfb does not release the firmware
framebuffer after the native graphics driver loaded.

Reported-by: Borah, Chaitanya Kumar <chaitanya.kumar.borah at intel.com>
Closes: https://lore.kernel.org/dri-devel/SJ1PR11MB6129EFB8CE63D1EF6D932F94B96F2@SJ1PR11MB6129.namprd11.prod.outlook.com/
Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12160
Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
Fixes: b49420d6a1ae ("video/aperture: optionally match the device in sysfb_disable()")
Cc: Javier Martinez Canillas <javierm at redhat.com>
Cc: Thomas Zimmermann <tzimmermann at suse.de>
Cc: Helge Deller <deller at gmx.de>
Cc: Sam Ravnborg <sam at ravnborg.org>
Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
Cc: Alex Deucher <alexander.deucher at amd.com>
Cc: dri-devel at lists.freedesktop.org
Cc: Linux regression tracking (Thorsten Leemhuis) <regressions at leemhuis.info>
Cc: <stable at vger.kernel.org> # v6.11+
Acked-by: Alex Deucher <alexander.deucher at amd.com>
Reviewed-by: Javier Martinez Canillas <javierm at redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240924084227.262271-1-tzimmermann@suse.de
Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
---
 drivers/firmware/sysfb.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/firmware/sysfb.c
+++ b/drivers/firmware/sysfb.c
@@ -67,9 +67,11 @@ static bool sysfb_unregister(void)
 void sysfb_disable(struct device *dev)
 {
 	struct screen_info *si = &screen_info;
+	struct device *parent;
 
 	mutex_lock(&disable_lock);
-	if (!dev || dev == sysfb_parent_dev(si)) {
+	parent = sysfb_parent_dev(si);
+	if (!dev || !parent || dev == parent) {
 		sysfb_unregister();
 		disabled = true;
 	}




More information about the dri-devel mailing list