FAILED: patch "[PATCH] drm/vc4: Fix firmware reference leak in vc4_drm_bind()" failed to apply to 6.6-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 6.6-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x b816da5d5df1461446a0a5f3fe2b4948a659a790
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026101258-operator-prior-e880@gregkh' --subject-prefix 'PATCH 6.6.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From b816da5d5df1461446a0a5f3fe2b4948a659a790 Mon Sep 17 00:00:00 2001
From: Wentao Liang <[email protected]>
Date: Wed, 16 Sep 2026 15:40:15 +0000
Subject: [PATCH] drm/vc4: Fix firmware reference leak in vc4_drm_bind()
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The firmware reference obtained via rpi_firmware_get() is leaked when aperture_remove_all_conflicting_devices() fails, as the error label returns without putting it. This happens before the firmware is consumed and put further down in the function.
Put the firmware reference before jumping to err.
drivers/gpu/drm/vc4/vc4_drv.c +4 -1
@@ -360,8 +360,11 @@ static int vc4_drm_bind(struct device *dev) } ret =aperture_remove_all_conflicting_devices (driver->name); -if (ret) +if (ret) { +if (firmware) +rpi_firmware_put (firmware); goto err; + }if (firmware) { ret = rpi_firmware_property(firmware,
Sasha Levin
maintainerPATCH 1/3 drm/vc4: Call drm_atomic_helper_shutdown() at shutdown time
From: Douglas Anderson <[email protected]>
[ Upstream commit 013d382d11a29ee13023c21dade684f98e47ec5a ]
Based on grepping through the source code these drivers appear to be missing a call to drm_atomic_helper_shutdown() at system shutdown time. Among other things, this means that if a panel is in use that it won't be cleanly powered off at system shutdown time.
The fact that we should call drm_atomic_helper_shutdown() in the case of OS shutdown/restart comes straight out of the kernel doc "driver instance overview" in drm_drv.c.
Stable-dep-of: b816da5d5df1 ("drm/vc4: Fix firmware reference leak in vc4_drm_bind()")
--- drivers/gpu/drm/vc4/vc4_drv.c | 36 ++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-)
drivers/gpu/drm/vc4/vc4_drv.c +23 -13
@@ -324,21 +324,21 @@ static int vc4_drm_bind(struct device *dev)if (!is_vc5) { ret =drmm_mutex_init (drm, &vc4->bin_bo_lock);if (ret) -return ret; + goto err; ret =vc4_bo_cache_init (drm);if (ret) -return ret; + goto err; } ret =drmm_mode_config_init (drm);if (ret) -return ret; + goto err;if (!is_vc5) { ret =vc4_gem_init (drm);if (ret) -return ret; + goto err; } node =of_find_compatible_node (NULL ,NULL ,"raspberrypi,bcm2835-firmware" );
@@ -346,13 +346,15 @@ static int vc4_drm_bind(struct device *dev) firmware =rpi_firmware_get (node);of_node_put (node); -if (!firmware) -return -EPROBE_DEFER ; +if (!firmware) { + ret = -EPROBE_DEFER ; + goto err; + } } ret =drm_aperture_remove_framebuffers (driver);if (ret) -return ret; + goto err;if (firmware) { ret = rpi_firmware_property(firmware,
@@ -366,32 +368,33 @@ static int vc4_drm_bind(struct device *dev) ret =component_bind_all (dev, drm);if (ret) -return ret; + goto err; ret =devm_add_action_or_reset (dev, vc4_component_unbind_all, vc4);if (ret) -return ret; + goto err; ret =vc4_plane_create_additional_planes (drm);if (ret) - goto unbind_all; + goto err; ret =vc4_kms_load (drm);if (ret <0 ) - goto unbind_all; + goto err;drm_for_each_crtc (crtc, drm)vc4_crtc_disable_at_boot (crtc); ret =drm_dev_register (drm,0 );if (ret <0 ) - goto unbind_all; + goto err;drm_fbdev_dma_setup (drm,16 );return 0 ; -unbind_all: +err: +platform_set_drvdata (pdev,NULL );return ret; }
@@ -401,6 +404,7 @@ static void vc4_drm_unbind(struct device *dev)drm_dev_unplug (drm);drm_atomic_helper_shutdown (drm); +dev_set_drvdata (dev,NULL ); }static const struct component_master_ops vc4_drm_ops = {
@@ -444,6 +448,11 @@ static void vc4_platform_drm_remove(struct platform_device *pdev)component_master_del (&pdev->dev, &vc4_drm_ops); } +static void vc4_platform_drm_shutdown (struct platform_device *pdev) +{ +drm_atomic_helper_shutdown (platform_get_drvdata (pdev)); +} +static const struct of_device_id vc4_of_match[] = { { .compatible ="brcm,bcm2711-vc5" , }, { .compatible ="brcm,bcm2835-vc4" , },
@@ -455,6 +464,7 @@ MODULE_DEVICE_TABLE(of, vc4_of_match);static struct platform_driver vc4_platform_driver = { .probe = vc4_platform_drm_probe, .remove_new = vc4_platform_drm_remove, + .shutdown = vc4_platform_drm_shutdown, .driver = { .name ="vc4-drm" , .of_match_table = vc4_of_match,
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/3 drm/vc4: Use video aperture helpers
From: Thomas Zimmermann <[email protected]>
[ Upstream commit 7e89e4365fd36ca006670788ec2c1527bfd0c61c ]
DRM's aperture functions have long been implemented as helpers under drivers/video/ for use with fbdev. Avoid the DRM wrappers by calling the video functions directly.
Stable-dep-of: b816da5d5df1 ("drm/vc4: Fix firmware reference leak in vc4_drm_bind()")
--- drivers/gpu/drm/vc4/vc4_drv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/gpu/drm/vc4/vc4_drv.c +2 -2
@@ -20,6 +20,7 @@* driver. */ +#include <linux/aperture.h> #include <linux/clk.h> #include <linux/component.h> #include <linux/device.h>
@@ -30,7 +31,6 @@#include <linux/platform_device.h> #include <linux/pm_runtime.h> -#include <drm/drm_aperture.h> #include <drm/drm_atomic_helper.h> #include <drm/drm_drv.h> #include <drm/drm_fbdev_dma.h>
@@ -352,7 +352,7 @@ static int vc4_drm_bind(struct device *dev) } } - ret =drm_aperture_remove_framebuffers (driver); + ret =aperture_remove_all_conflicting_devices (driver->name);if (ret) goto err;
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 3/3 drm/vc4: Fix firmware reference leak in vc4_drm_bind()
In reply to Sasha LevinFrom: Wentao Liang <[email protected]>
[ Upstream commit b816da5d5df1461446a0a5f3fe2b4948a659a790 ]
The firmware reference obtained via rpi_firmware_get() is leaked when aperture_remove_all_conflicting_devices() fails, as the error label returns without putting it. This happens before the firmware is consumed and put further down in the function.
Put the firmware reference before jumping to err.
--- drivers/gpu/drm/vc4/vc4_drv.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/gpu/drm/vc4/vc4_drv.c +4 -1
@@ -353,8 +353,11 @@ static int vc4_drm_bind(struct device *dev) } ret =aperture_remove_all_conflicting_devices (driver->name); -if (ret) +if (ret) { +if (firmware) +rpi_firmware_put (firmware); goto err; + }if (firmware) { ret = rpi_firmware_property(firmware,
Signature · 1 line
2.53.0