Re: [PATCH v2] clk: scu/imx8qxp: do not register driver in probe()
From: Daniel Baluta
Date: Fri Feb 13 2026 - 03:55:43 EST
On 2/13/26 01:58, Danilo Krummrich wrote:
> 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].
>
> Besides that, 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.
>
> Also, 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.
>
> Hence, register the imx_clk_scu_driver from module_init() and unregister
> it in module_exit().
>
> Note that we first register the imx8qxp_clk_driver and then call
> imx_clk_scu_module_init() to avoid having to call
> imx_clk_scu_module_exit() in the unwind path of imx8qxp_clk_init().
>
> Fixes: dc23806a7c47 ("driver core: enforce device_lock for driver_match_device()")
> Fixes: 220175cd3979 ("clk: imx: scu: fix build break when compiled as modules")
> Reported-by: Alexander Stein <alexander.stein@xxxxxxxxxxxxxxx>
> Closes: https://lore.kernel.org/lkml/13955113.uLZWGnKmhe@steina-w/
> Tested-by: Alexander Stein <alexander.stein@xxxxxxxxxxxxxxx> # TQMa8x/MBa8x
> Link: https://lore.kernel.org/lkml/DFU7CEPUSG9A.1KKGVW4HIPMSH@xxxxxxxxxx/ [1]
> Signed-off-by: Danilo Krummrich <dakr@xxxxxxxxxx>
Reviewed-by: Daniel Baluta <daniel.baluta@xxxxxxx>