Thread (6 messages) 6 messages, 4 authors, 2026-02-12

Re: [PATCH] clk: scu/imx8qxp: do not register driver in probe()

From: "Danilo Krummrich" <dakr@kernel.org>
Date: 2026-02-12 10:58:02
Also in: driver-core, imx, linux-clk, lkml

On Wed Feb 11, 2026 at 3:59 PM CET, Daniel Baluta wrote:
On 2/11/26 16:43, Alexander Stein wrote:
quoted
Am Mittwoch, 11. Februar 2026, 15:23:16 CET schrieb Danilo Krummrich:
quoted
imx_clk_scu_init() registers the imx_clk_scu_driver while commonly being
called from IMX driver's probe() callbacks.

However, it neither makes sense to register drivers from probe()
callbacks of other drivers, nor does the driver core allow registering
drivers with a device lock already being held.

The latter was revealed by commit dc23806a7c47 ("driver core: enforce
device_lock for driver_match_device()") leading to a deadlock condition
described in [1].

Additionally, nothing seems to unregister the imx_clk_scu_driver once
the corresponding driver module is unloaded, which leaves the
driver-core with a dangling pointer.
Actually, this fixes a third bug: If there are multiple matching devices for the
imx8qxp_clk_driver, imx8qxp_clk_probe() calls imx_clk_scu_init() multiple times.
However, any subsequent call after the first one will fail, since the driver
core does not allow to register the same struct platform_driver multiple times.
quoted
quoted
diff --git a/drivers/clk/imx/clk-imx8qxp.c b/drivers/clk/imx/clk-imx8qxp.c
index 3ae162625bb1..d89a2f40771e 100644
--- a/drivers/clk/imx/clk-imx8qxp.c
+++ b/drivers/clk/imx/clk-imx8qxp.c
@@ -346,7 +346,29 @@ static struct platform_driver imx8qxp_clk_driver = {
 	},
 	.probe = imx8qxp_clk_probe,
 };
-module_platform_driver(imx8qxp_clk_driver);
+
+static int __init imx8qxp_init(void)
I would call this imx8qxp_clk_init. Same for imx8qxp_exit.
Sure.
quoted
quoted
+{
+	int ret;
+
+	ret = platform_driver_register(&imx8qxp_clk_driver);
+	if (ret)
+		return ret;
+
+	ret = imx_clk_scu_module_init();
+	if (ret)
+		platform_driver_unregister(&imx8qxp_clk_driver);
+
+	return ret;
Also, because the logical flow is that CLK driver is uing SCU for calls I would first call
imx_clk_scu_module_init and then register the imx8qxp_clk driver. 

But there is no functionality issues your your approach too, just a better logical flow.
Sure, I will send a v2 shortly, as it would be good to get this into an early
-fixes PR.

Thanks,
Danilo
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help