[PATCH v2 8/8] clk: clocking-wizard: Use separate notifier_block for each clock

From: Shubhrajyoti Datta

Date: Thu Jul 09 2026 - 07:32:04 EST


A struct notifier_block has a single 'next' pointer, so registering the
same instance to two different notification chains corrupts the linked
lists. Use a dedicated nb_axi for the s_axi_aclk notifier chain.

Signed-off-by: Shubhrajyoti Datta <shubhrajyoti.datta@xxxxxxx>
patch added for notifiew_block

---

(no changes since v1)

drivers/clk/xilinx/clk-xlnx-clock-wizard.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/clk/xilinx/clk-xlnx-clock-wizard.c b/drivers/clk/xilinx/clk-xlnx-clock-wizard.c
index 289c32ab5cd8..bcbfb4341dba 100644
--- a/drivers/clk/xilinx/clk-xlnx-clock-wizard.c
+++ b/drivers/clk/xilinx/clk-xlnx-clock-wizard.c
@@ -126,7 +126,8 @@ enum clk_wzrd_int_clks {
/**
* struct clk_wzrd - Clock wizard private data structure
*
- * @nb: Notifier block
+ * @nb: Notifier block for clk_in1
+ * @nb_axi: Notifier block for s_axi_aclk
* @base: Memory base
* @clk_in1: Handle to input clock 'clk_in1'
* @axi_clk: Handle to input clock 's_axi_aclk'
@@ -137,6 +138,7 @@ enum clk_wzrd_int_clks {
*/
struct clk_wzrd {
struct notifier_block nb;
+ struct notifier_block nb_axi;
void __iomem *base;
struct clk *clk_in1;
struct clk *axi_clk;
@@ -1318,8 +1320,10 @@ static int clk_wzrd_probe(struct platform_device *pdev)
dev_warn(&pdev->dev,
"unable to register clock notifier\n");

+ clk_wzrd->nb_axi.notifier_call = clk_wzrd_clk_notifier;
+
ret = devm_clk_notifier_register(&pdev->dev, clk_wzrd->axi_clk,
- &clk_wzrd->nb);
+ &clk_wzrd->nb_axi);
if (ret)
dev_warn(&pdev->dev,
"unable to register clock notifier\n");
--
2.34.1