Linux kernel -stable discussions
 help / color / mirror / Atom feed
* [PATCH] firmware/sysfb: Disable sysfb for firmware buffers with unknown parent
@ 2024-09-24  8:41 Thomas Zimmermann
  2024-09-24 13:24 ` Alex Deucher
  2024-09-24 13:37 ` Javier Martinez Canillas
  0 siblings, 2 replies; 3+ messages in thread
From: Thomas Zimmermann @ 2024-09-24  8:41 UTC (permalink / raw)
  To: javierm, alexander.deucher, chaitanya.kumar.borah
  Cc: dri-devel, Thomas Zimmermann, Helge Deller, Sam Ravnborg,
	Daniel Vetter, Linux regression tracking (Thorsten Leemhuis),
	stable

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@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@suse.de>
Fixes: b49420d6a1ae ("video/aperture: optionally match the device in sysfb_disable()")
Cc: Javier Martinez Canillas <javierm@redhat.com>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Helge Deller <deller@gmx.de>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: dri-devel@lists.freedesktop.org
Cc: Linux regression tracking (Thorsten Leemhuis) <regressions@leemhuis.info>
Cc: <stable@vger.kernel.org> # v6.11+
---
 drivers/firmware/sysfb.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/firmware/sysfb.c b/drivers/firmware/sysfb.c
index 02a07d3d0d40..a3df782fa687 100644
--- 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;
 	}
-- 
2.46.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] firmware/sysfb: Disable sysfb for firmware buffers with unknown parent
  2024-09-24  8:41 [PATCH] firmware/sysfb: Disable sysfb for firmware buffers with unknown parent Thomas Zimmermann
@ 2024-09-24 13:24 ` Alex Deucher
  2024-09-24 13:37 ` Javier Martinez Canillas
  1 sibling, 0 replies; 3+ messages in thread
From: Alex Deucher @ 2024-09-24 13:24 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: javierm, alexander.deucher, chaitanya.kumar.borah, dri-devel,
	Helge Deller, Sam Ravnborg, Daniel Vetter,
	Linux regression tracking (Thorsten Leemhuis), stable

On Tue, Sep 24, 2024 at 4:58 AM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
> 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@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@suse.de>
> Fixes: b49420d6a1ae ("video/aperture: optionally match the device in sysfb_disable()")
> Cc: Javier Martinez Canillas <javierm@redhat.com>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: Helge Deller <deller@gmx.de>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: dri-devel@lists.freedesktop.org
> Cc: Linux regression tracking (Thorsten Leemhuis) <regressions@leemhuis.info>
> Cc: <stable@vger.kernel.org> # v6.11+

Thanks for fixing this.

Acked-by: Alex Deucher <alexander.deucher@amd.com>

> ---
>  drivers/firmware/sysfb.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/firmware/sysfb.c b/drivers/firmware/sysfb.c
> index 02a07d3d0d40..a3df782fa687 100644
> --- 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;
>         }
> --
> 2.46.0
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] firmware/sysfb: Disable sysfb for firmware buffers with unknown parent
  2024-09-24  8:41 [PATCH] firmware/sysfb: Disable sysfb for firmware buffers with unknown parent Thomas Zimmermann
  2024-09-24 13:24 ` Alex Deucher
@ 2024-09-24 13:37 ` Javier Martinez Canillas
  1 sibling, 0 replies; 3+ messages in thread
From: Javier Martinez Canillas @ 2024-09-24 13:37 UTC (permalink / raw)
  To: Thomas Zimmermann, alexander.deucher, chaitanya.kumar.borah
  Cc: dri-devel, Thomas Zimmermann, Helge Deller, Sam Ravnborg,
	Daniel Vetter, Linux regression tracking (Thorsten Leemhuis),
	stable

Thomas Zimmermann <tzimmermann@suse.de> writes:

Hello Thomas,

> 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@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@suse.de>
> Fixes: b49420d6a1ae ("video/aperture: optionally match the device in sysfb_disable()")
> Cc: Javier Martinez Canillas <javierm@redhat.com>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: Helge Deller <deller@gmx.de>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: dri-devel@lists.freedesktop.org
> Cc: Linux regression tracking (Thorsten Leemhuis) <regressions@leemhuis.info>
> Cc: <stable@vger.kernel.org> # v6.11+
> ---
>  drivers/firmware/sysfb.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/firmware/sysfb.c b/drivers/firmware/sysfb.c
> index 02a07d3d0d40..a3df782fa687 100644
> --- 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;
>  	}

Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>

-- 
Best regards,

Javier Martinez Canillas
Core Platforms
Red Hat


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-09-24 13:37 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-24  8:41 [PATCH] firmware/sysfb: Disable sysfb for firmware buffers with unknown parent Thomas Zimmermann
2024-09-24 13:24 ` Alex Deucher
2024-09-24 13:37 ` Javier Martinez Canillas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox