FAILED: patch "[PATCH] serial: ma35d1: Fix clock reference leak in" failed to apply to 6.6-stable tree
[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 98401cf912fe8a081ef8e500c421b6d957b55a99
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026100517-epic-chomp-5963@gregkh' --subject-prefix 'PATCH 6.6.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 98401cf912fe8a081ef8e500c421b6d957b55a99 Mon Sep 17 00:00:00 2001
From: Wentao Liang <[email protected]>
Date: Thu, 17 Sep 2026 15:56:50 +0000
Subject: [PATCH] serial: ma35d1: Fix clock reference leak in
ma35d1serial_probe()
of_clk_get() returns a clock with a reference that has to be released with clk_put(). ma35d1serial_probe() never does that, so the reference is leaked on the probe error paths and also when the port is removed.
Release it on the error paths and in ma35d1serial_remove().
drivers/tty/serial/ma35d1_serial.c +5 -1
@@ -728,7 +728,7 @@ static int ma35d1serial_probe(struct platform_device *pdev) ret =clk_prepare_enable (up->clk);if (ret) - goto err_iounmap; + goto err_put_clk;if (up->port.line !=0 ) up->port.uartclk =clk_get_rate (up->clk);
@@ -755,6 +755,9 @@ static int ma35d1serial_probe(struct platform_device *pdev) err_clk_disable:clk_disable_unprepare (up->clk); +err_put_clk: +clk_put (up->clk); + err_iounmap:iounmap (up->port.membase);return ret;
@@ -770,6 +773,7 @@ static void ma35d1serial_remove(struct platform_device *dev)uart_remove_one_port (&ma35d1serial_reg, port);clk_disable_unprepare (up->clk); +clk_put (up->clk); }static int ma35d1serial_suspend (struct platform_device *dev,pm_message_t state)
Sasha Levin
maintainerPATCH 1/2 serial: ma35d1: Convert to platform remove callback returning void
From: Uwe Kleine-König <[email protected]>
[ Upstream commit cec346ec4649bb9d741a52da1632db4e6fd13947 ]
The .remove() callback for a platform driver returns an int which makes many driver authors wrongly assume it's possible to do error handling by returning an error code. However the value returned is ignored (apart from emitting a warning) and this typically results in resource leaks.
To improve here there is a quest to make the remove callback return void. In the first step of this quest all drivers are converted to .remove_new(), which already returns void. Eventually after all drivers are converted, .remove_new() will be renamed to .remove().
Trivially convert this driver from always returning zero in the remove callback to the void returning variant.
Stable-dep-of: 98401cf912fe ("serial: ma35d1: Fix clock reference leak in ma35d1serial_probe()")
--- drivers/tty/serial/ma35d1_serial.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/tty/serial/ma35d1_serial.c +2 -3
@@ -760,14 +760,13 @@ static int ma35d1serial_probe(struct platform_device *pdev)/* * Remove serial ports registered against a platform device. */ -static int ma35d1serial_remove (struct platform_device *dev) +static void ma35d1serial_remove (struct platform_device *dev) {struct uart_port *port =platform_get_drvdata (dev);struct uart_ma35d1_port *up =to_ma35d1_uart_port (port);uart_remove_one_port (&ma35d1serial_reg, port);clk_disable_unprepare (up->clk); -return 0 ; }static int ma35d1serial_suspend (struct platform_device *dev,pm_message_t state)
@@ -800,7 +799,7 @@ static int ma35d1serial_resume(struct platform_device *dev)static struct platform_driver ma35d1serial_driver = { .probe = ma35d1serial_probe, - .remove = ma35d1serial_remove, + .remove_new = ma35d1serial_remove, .suspend = ma35d1serial_suspend, .resume = ma35d1serial_resume, .driver = {
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/2 serial: ma35d1: Fix clock reference leak in ma35d1serial_probe()
From: Wentao Liang <[email protected]>
[ Upstream commit 98401cf912fe8a081ef8e500c421b6d957b55a99 ]
of_clk_get() returns a clock with a reference that has to be released with clk_put(). ma35d1serial_probe() never does that, so the reference is leaked on the probe error paths and also when the port is removed.
Release it on the error paths and in ma35d1serial_remove().
--- drivers/tty/serial/ma35d1_serial.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/tty/serial/ma35d1_serial.c +5 -1
@@ -725,7 +725,7 @@ static int ma35d1serial_probe(struct platform_device *pdev) ret =clk_prepare_enable (up->clk);if (ret) - goto err_iounmap; + goto err_put_clk;if (up->port.line !=0 ) up->port.uartclk =clk_get_rate (up->clk);
@@ -752,6 +752,9 @@ static int ma35d1serial_probe(struct platform_device *pdev) err_clk_disable:clk_disable_unprepare (up->clk); +err_put_clk: +clk_put (up->clk); + err_iounmap:iounmap (up->port.membase);return ret;
@@ -767,6 +770,7 @@ static void ma35d1serial_remove(struct platform_device *dev)uart_remove_one_port (&ma35d1serial_reg, port);clk_disable_unprepare (up->clk); +clk_put (up->clk); }static int ma35d1serial_suspend (struct platform_device *dev,pm_message_t state)
Signature · 1 line
2.53.0