]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
clk: xilinx: vcu: unregister pll_post only if registered correctly
authorRohit Visavalia <rohit.visavalia@amd.com>
Mon, 10 Feb 2025 11:36:13 +0000 (03:36 -0800)
committerStephen Boyd <sboyd@kernel.org>
Sat, 21 Jun 2025 21:48:05 +0000 (14:48 -0700)
If registration of pll_post is failed, it will be set to NULL or ERR,
unregistering same will fail with following call trace:

Unable to handle kernel NULL pointer dereference at virtual address 008
pc : clk_hw_unregister+0xc/0x20
lr : clk_hw_unregister_fixed_factor+0x18/0x30
sp : ffff800011923850
...
Call trace:
 clk_hw_unregister+0xc/0x20
 clk_hw_unregister_fixed_factor+0x18/0x30
 xvcu_unregister_clock_provider+0xcc/0xf4 [xlnx_vcu]
 xvcu_probe+0x2bc/0x53c [xlnx_vcu]

Fixes: 4472e1849db7 ("soc: xilinx: vcu: make pll post divider explicit")
Signed-off-by: Rohit Visavalia <rohit.visavalia@amd.com>
Link: https://lore.kernel.org/r/20250210113614.4149050-2-rohit.visavalia@amd.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/xilinx/xlnx_vcu.c

index 81501b48412ee65e285030ccf0c3a7ca7b06596a..88b3fd8250c2022b9d7263890bbafae50e9af6b0 100644 (file)
@@ -587,8 +587,8 @@ static void xvcu_unregister_clock_provider(struct xvcu_device *xvcu)
                xvcu_clk_hw_unregister_leaf(hws[CLK_XVCU_ENC_MCU]);
        if (!IS_ERR_OR_NULL(hws[CLK_XVCU_ENC_CORE]))
                xvcu_clk_hw_unregister_leaf(hws[CLK_XVCU_ENC_CORE]);
-
-       clk_hw_unregister_fixed_factor(xvcu->pll_post);
+       if (!IS_ERR_OR_NULL(xvcu->pll_post))
+               clk_hw_unregister_fixed_factor(xvcu->pll_post);
 }
 
 /**