* [PATCH 0/4] Followup to "Make clk_hw::init NULL after clk registration" @ 2019-08-15 16:00 Stephen Boyd 2019-08-15 16:00 ` [PATCH 1/4] clk: milbeaut: Don't reference clk_init_data after registration Stephen Boyd ` (4 more replies) 0 siblings, 5 replies; 14+ messages in thread From: Stephen Boyd @ 2019-08-15 16:00 UTC (permalink / raw) To: Michael Turquette, Stephen Boyd Cc: linux-kernel, linux-clk, linux-rtc, bot, tomeu.vizoso, guillaume.tucker, mgalka, broonie, matthew.hart, khilman, enric.balletbo, Sylwester Nawrocki, Alessandro Zummo, Alexandre Belloni, Chen-Yu Tsai, Jun Nie, Maxime Ripard, Shawn Guo, Sugaya Taichi, Taniya Das I found some more cases where the init structure is referenced from within the clk_hw struct after clk_registration is called. I suspect the rtc driver fix is useful to avoid crashes on Allwinner devices, reported by kernel-ci. Cc: <bot@kernelci.org> Cc: <tomeu.vizoso@collabora.com> Cc: <guillaume.tucker@collabora.com> Cc: <mgalka@collabora.com> Cc: <broonie@kernel.org> Cc: <matthew.hart@linaro.org> Cc: <khilman@baylibre.com> Cc: <enric.balletbo@collabora.com> Cc: Sylwester Nawrocki <s.nawrocki@samsung.com> Cc: Alessandro Zummo <a.zummo@towertech.it> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> Cc: Chen-Yu Tsai <wens@csie.org> Cc: Jun Nie <jun.nie@linaro.org> Cc: Maxime Ripard <maxime.ripard@bootlin.com> Cc: Shawn Guo <shawnguo@kernel.org> Cc: Sugaya Taichi <sugaya.taichi@socionext.com> Cc: Taniya Das <tdas@codeaurora.org> Stephen Boyd (4): clk: milbeaut: Don't reference clk_init_data after registration clk: zx296718: Don't reference clk_init_data after registration rtc: sun6i: Don't reference clk_init_data after registration clk: qcom: Remove error prints from DFS registration drivers/clk/clk-milbeaut.c | 2 +- drivers/clk/qcom/clk-rcg2.c | 8 +-- drivers/clk/zte/clk-zx296718.c | 109 +++++++++++++++------------------ drivers/rtc/rtc-sun6i.c | 2 +- 4 files changed, 52 insertions(+), 69 deletions(-) -- Sent by a computer through tubes ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/4] clk: milbeaut: Don't reference clk_init_data after registration 2019-08-15 16:00 [PATCH 0/4] Followup to "Make clk_hw::init NULL after clk registration" Stephen Boyd @ 2019-08-15 16:00 ` Stephen Boyd 2019-08-16 17:20 ` Stephen Boyd 2019-08-15 16:00 ` [PATCH 2/4] clk: zx296718: " Stephen Boyd ` (3 subsequent siblings) 4 siblings, 1 reply; 14+ messages in thread From: Stephen Boyd @ 2019-08-15 16:00 UTC (permalink / raw) To: Michael Turquette, Stephen Boyd; +Cc: linux-kernel, linux-clk, Sugaya Taichi A future patch is going to change semantics of clk_register() so that clk_hw::init is guaranteed to be NULL after a clk is registered. Avoid referencing this member here so that we don't run into NULL pointer exceptions. Cc: Sugaya Taichi <sugaya.taichi@socionext.com> Signed-off-by: Stephen Boyd <sboyd@kernel.org> --- drivers/clk/clk-milbeaut.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/clk/clk-milbeaut.c b/drivers/clk/clk-milbeaut.c index 5fc78faf820c..80b9d78493bc 100644 --- a/drivers/clk/clk-milbeaut.c +++ b/drivers/clk/clk-milbeaut.c @@ -437,7 +437,7 @@ static int m10v_clk_divider_set_rate(struct clk_hw *hw, unsigned long rate, if (readl_poll_timeout(divider->write_valid_reg, val, !val, M10V_UPOLL_RATE, M10V_UTIMEOUT)) pr_err("%s:%s couldn't stabilize\n", - __func__, divider->hw.init->name); + __func__, clk_hw_get_name(hw)); } if (divider->lock) -- Sent by a computer through tubes ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 1/4] clk: milbeaut: Don't reference clk_init_data after registration 2019-08-15 16:00 ` [PATCH 1/4] clk: milbeaut: Don't reference clk_init_data after registration Stephen Boyd @ 2019-08-16 17:20 ` Stephen Boyd 0 siblings, 0 replies; 14+ messages in thread From: Stephen Boyd @ 2019-08-16 17:20 UTC (permalink / raw) To: Michael Turquette, Stephen Boyd; +Cc: linux-kernel, linux-clk, Sugaya Taichi Quoting Stephen Boyd (2019-08-15 09:00:17) > A future patch is going to change semantics of clk_register() so that > clk_hw::init is guaranteed to be NULL after a clk is registered. Avoid > referencing this member here so that we don't run into NULL pointer > exceptions. > > Cc: Sugaya Taichi <sugaya.taichi@socionext.com> > Signed-off-by: Stephen Boyd <sboyd@kernel.org> > --- Applied to clk-next ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 2/4] clk: zx296718: Don't reference clk_init_data after registration 2019-08-15 16:00 [PATCH 0/4] Followup to "Make clk_hw::init NULL after clk registration" Stephen Boyd 2019-08-15 16:00 ` [PATCH 1/4] clk: milbeaut: Don't reference clk_init_data after registration Stephen Boyd @ 2019-08-15 16:00 ` Stephen Boyd 2019-08-16 17:20 ` Stephen Boyd 2019-08-15 16:00 ` [PATCH 3/4] rtc: sun6i: " Stephen Boyd ` (2 subsequent siblings) 4 siblings, 1 reply; 14+ messages in thread From: Stephen Boyd @ 2019-08-15 16:00 UTC (permalink / raw) To: Michael Turquette, Stephen Boyd Cc: linux-kernel, linux-clk, Jun Nie, Shawn Guo A future patch is going to change semantics of clk_register() so that clk_hw::init is guaranteed to be NULL after a clk is registered. Avoid referencing this member here so that we don't run into NULL pointer exceptions. Cc: Jun Nie <jun.nie@linaro.org> Cc: Shawn Guo <shawnguo@kernel.org> Signed-off-by: Stephen Boyd <sboyd@kernel.org> --- drivers/clk/zte/clk-zx296718.c | 109 +++++++++++++++------------------ 1 file changed, 49 insertions(+), 60 deletions(-) diff --git a/drivers/clk/zte/clk-zx296718.c b/drivers/clk/zte/clk-zx296718.c index fd6c347bec6a..dd7045bc48c1 100644 --- a/drivers/clk/zte/clk-zx296718.c +++ b/drivers/clk/zte/clk-zx296718.c @@ -564,6 +564,7 @@ static int __init top_clocks_init(struct device_node *np) { void __iomem *reg_base; int i, ret; + const char *name; reg_base = of_iomap(np, 0); if (!reg_base) { @@ -573,11 +574,10 @@ static int __init top_clocks_init(struct device_node *np) for (i = 0; i < ARRAY_SIZE(zx296718_pll_clk); i++) { zx296718_pll_clk[i].reg_base += (uintptr_t)reg_base; + name = zx296718_pll_clk[i].hw.init->name; ret = clk_hw_register(NULL, &zx296718_pll_clk[i].hw); - if (ret) { - pr_warn("top clk %s init error!\n", - zx296718_pll_clk[i].hw.init->name); - } + if (ret) + pr_warn("top clk %s init error!\n", name); } for (i = 0; i < ARRAY_SIZE(top_ffactor_clk); i++) { @@ -585,11 +585,10 @@ static int __init top_clocks_init(struct device_node *np) top_hw_onecell_data.hws[top_ffactor_clk[i].id] = &top_ffactor_clk[i].factor.hw; + name = top_ffactor_clk[i].factor.hw.init->name; ret = clk_hw_register(NULL, &top_ffactor_clk[i].factor.hw); - if (ret) { - pr_warn("top clk %s init error!\n", - top_ffactor_clk[i].factor.hw.init->name); - } + if (ret) + pr_warn("top clk %s init error!\n", name); } for (i = 0; i < ARRAY_SIZE(top_mux_clk); i++) { @@ -598,11 +597,10 @@ static int __init top_clocks_init(struct device_node *np) &top_mux_clk[i].mux.hw; top_mux_clk[i].mux.reg += (uintptr_t)reg_base; + name = top_mux_clk[i].mux.hw.init->name; ret = clk_hw_register(NULL, &top_mux_clk[i].mux.hw); - if (ret) { - pr_warn("top clk %s init error!\n", - top_mux_clk[i].mux.hw.init->name); - } + if (ret) + pr_warn("top clk %s init error!\n", name); } for (i = 0; i < ARRAY_SIZE(top_gate_clk); i++) { @@ -611,11 +609,10 @@ static int __init top_clocks_init(struct device_node *np) &top_gate_clk[i].gate.hw; top_gate_clk[i].gate.reg += (uintptr_t)reg_base; + name = top_gate_clk[i].gate.hw.init->name; ret = clk_hw_register(NULL, &top_gate_clk[i].gate.hw); - if (ret) { - pr_warn("top clk %s init error!\n", - top_gate_clk[i].gate.hw.init->name); - } + if (ret) + pr_warn("top clk %s init error!\n", name); } for (i = 0; i < ARRAY_SIZE(top_div_clk); i++) { @@ -624,11 +621,10 @@ static int __init top_clocks_init(struct device_node *np) &top_div_clk[i].div.hw; top_div_clk[i].div.reg += (uintptr_t)reg_base; + name = top_div_clk[i].div.hw.init->name; ret = clk_hw_register(NULL, &top_div_clk[i].div.hw); - if (ret) { - pr_warn("top clk %s init error!\n", - top_div_clk[i].div.hw.init->name); - } + if (ret) + pr_warn("top clk %s init error!\n", name); } ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, @@ -754,6 +750,7 @@ static int __init lsp0_clocks_init(struct device_node *np) { void __iomem *reg_base; int i, ret; + const char *name; reg_base = of_iomap(np, 0); if (!reg_base) { @@ -767,11 +764,10 @@ static int __init lsp0_clocks_init(struct device_node *np) &lsp0_mux_clk[i].mux.hw; lsp0_mux_clk[i].mux.reg += (uintptr_t)reg_base; + name = lsp0_mux_clk[i].mux.hw.init->name; ret = clk_hw_register(NULL, &lsp0_mux_clk[i].mux.hw); - if (ret) { - pr_warn("lsp0 clk %s init error!\n", - lsp0_mux_clk[i].mux.hw.init->name); - } + if (ret) + pr_warn("lsp0 clk %s init error!\n", name); } for (i = 0; i < ARRAY_SIZE(lsp0_gate_clk); i++) { @@ -780,11 +776,10 @@ static int __init lsp0_clocks_init(struct device_node *np) &lsp0_gate_clk[i].gate.hw; lsp0_gate_clk[i].gate.reg += (uintptr_t)reg_base; + name = lsp0_gate_clk[i].gate.hw.init->name; ret = clk_hw_register(NULL, &lsp0_gate_clk[i].gate.hw); - if (ret) { - pr_warn("lsp0 clk %s init error!\n", - lsp0_gate_clk[i].gate.hw.init->name); - } + if (ret) + pr_warn("lsp0 clk %s init error!\n", name); } for (i = 0; i < ARRAY_SIZE(lsp0_div_clk); i++) { @@ -793,11 +788,10 @@ static int __init lsp0_clocks_init(struct device_node *np) &lsp0_div_clk[i].div.hw; lsp0_div_clk[i].div.reg += (uintptr_t)reg_base; + name = lsp0_div_clk[i].div.hw.init->name; ret = clk_hw_register(NULL, &lsp0_div_clk[i].div.hw); - if (ret) { - pr_warn("lsp0 clk %s init error!\n", - lsp0_div_clk[i].div.hw.init->name); - } + if (ret) + pr_warn("lsp0 clk %s init error!\n", name); } ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, @@ -862,6 +856,7 @@ static int __init lsp1_clocks_init(struct device_node *np) { void __iomem *reg_base; int i, ret; + const char *name; reg_base = of_iomap(np, 0); if (!reg_base) { @@ -875,11 +870,10 @@ static int __init lsp1_clocks_init(struct device_node *np) &lsp0_mux_clk[i].mux.hw; lsp1_mux_clk[i].mux.reg += (uintptr_t)reg_base; + name = lsp1_mux_clk[i].mux.hw.init->name; ret = clk_hw_register(NULL, &lsp1_mux_clk[i].mux.hw); - if (ret) { - pr_warn("lsp1 clk %s init error!\n", - lsp1_mux_clk[i].mux.hw.init->name); - } + if (ret) + pr_warn("lsp1 clk %s init error!\n", name); } for (i = 0; i < ARRAY_SIZE(lsp1_gate_clk); i++) { @@ -888,11 +882,10 @@ static int __init lsp1_clocks_init(struct device_node *np) &lsp1_gate_clk[i].gate.hw; lsp1_gate_clk[i].gate.reg += (uintptr_t)reg_base; + name = lsp1_gate_clk[i].gate.hw.init->name; ret = clk_hw_register(NULL, &lsp1_gate_clk[i].gate.hw); - if (ret) { - pr_warn("lsp1 clk %s init error!\n", - lsp1_gate_clk[i].gate.hw.init->name); - } + if (ret) + pr_warn("lsp1 clk %s init error!\n", name); } for (i = 0; i < ARRAY_SIZE(lsp1_div_clk); i++) { @@ -901,11 +894,10 @@ static int __init lsp1_clocks_init(struct device_node *np) &lsp1_div_clk[i].div.hw; lsp1_div_clk[i].div.reg += (uintptr_t)reg_base; + name = lsp1_div_clk[i].div.hw.init->name; ret = clk_hw_register(NULL, &lsp1_div_clk[i].div.hw); - if (ret) { - pr_warn("lsp1 clk %s init error!\n", - lsp1_div_clk[i].div.hw.init->name); - } + if (ret) + pr_warn("lsp1 clk %s init error!\n", name); } ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, @@ -979,6 +971,7 @@ static int __init audio_clocks_init(struct device_node *np) { void __iomem *reg_base; int i, ret; + const char *name; reg_base = of_iomap(np, 0); if (!reg_base) { @@ -992,11 +985,10 @@ static int __init audio_clocks_init(struct device_node *np) &audio_mux_clk[i].mux.hw; audio_mux_clk[i].mux.reg += (uintptr_t)reg_base; + name = audio_mux_clk[i].mux.hw.init->name; ret = clk_hw_register(NULL, &audio_mux_clk[i].mux.hw); - if (ret) { - pr_warn("audio clk %s init error!\n", - audio_mux_clk[i].mux.hw.init->name); - } + if (ret) + pr_warn("audio clk %s init error!\n", name); } for (i = 0; i < ARRAY_SIZE(audio_adiv_clk); i++) { @@ -1005,11 +997,10 @@ static int __init audio_clocks_init(struct device_node *np) &audio_adiv_clk[i].hw; audio_adiv_clk[i].reg_base += (uintptr_t)reg_base; + name = audio_adiv_clk[i].hw.init->name; ret = clk_hw_register(NULL, &audio_adiv_clk[i].hw); - if (ret) { - pr_warn("audio clk %s init error!\n", - audio_adiv_clk[i].hw.init->name); - } + if (ret) + pr_warn("audio clk %s init error!\n", name); } for (i = 0; i < ARRAY_SIZE(audio_div_clk); i++) { @@ -1018,11 +1009,10 @@ static int __init audio_clocks_init(struct device_node *np) &audio_div_clk[i].div.hw; audio_div_clk[i].div.reg += (uintptr_t)reg_base; + name = audio_div_clk[i].div.hw.init->name; ret = clk_hw_register(NULL, &audio_div_clk[i].div.hw); - if (ret) { - pr_warn("audio clk %s init error!\n", - audio_div_clk[i].div.hw.init->name); - } + if (ret) + pr_warn("audio clk %s init error!\n", name); } for (i = 0; i < ARRAY_SIZE(audio_gate_clk); i++) { @@ -1031,11 +1021,10 @@ static int __init audio_clocks_init(struct device_node *np) &audio_gate_clk[i].gate.hw; audio_gate_clk[i].gate.reg += (uintptr_t)reg_base; + name = audio_gate_clk[i].gate.hw.init->name; ret = clk_hw_register(NULL, &audio_gate_clk[i].gate.hw); - if (ret) { - pr_warn("audio clk %s init error!\n", - audio_gate_clk[i].gate.hw.init->name); - } + if (ret) + pr_warn("audio clk %s init error!\n", name); } ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, -- Sent by a computer through tubes ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 2/4] clk: zx296718: Don't reference clk_init_data after registration 2019-08-15 16:00 ` [PATCH 2/4] clk: zx296718: " Stephen Boyd @ 2019-08-16 17:20 ` Stephen Boyd 0 siblings, 0 replies; 14+ messages in thread From: Stephen Boyd @ 2019-08-16 17:20 UTC (permalink / raw) To: Michael Turquette, Stephen Boyd Cc: linux-kernel, linux-clk, Jun Nie, Shawn Guo Quoting Stephen Boyd (2019-08-15 09:00:18) > A future patch is going to change semantics of clk_register() so that > clk_hw::init is guaranteed to be NULL after a clk is registered. Avoid > referencing this member here so that we don't run into NULL pointer > exceptions. > > Cc: Jun Nie <jun.nie@linaro.org> > Cc: Shawn Guo <shawnguo@kernel.org> > Signed-off-by: Stephen Boyd <sboyd@kernel.org> > --- Applied to clk-next ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 3/4] rtc: sun6i: Don't reference clk_init_data after registration 2019-08-15 16:00 [PATCH 0/4] Followup to "Make clk_hw::init NULL after clk registration" Stephen Boyd 2019-08-15 16:00 ` [PATCH 1/4] clk: milbeaut: Don't reference clk_init_data after registration Stephen Boyd 2019-08-15 16:00 ` [PATCH 2/4] clk: zx296718: " Stephen Boyd @ 2019-08-15 16:00 ` Stephen Boyd 2019-08-15 16:11 ` Chen-Yu Tsai ` (3 more replies) 2019-08-15 16:00 ` [PATCH 4/4] clk: qcom: Remove error prints from DFS registration Stephen Boyd 2019-08-19 7:02 ` [PATCH 0/4] Followup to "Make clk_hw::init NULL after clk registration" Guillaume Tucker 4 siblings, 4 replies; 14+ messages in thread From: Stephen Boyd @ 2019-08-15 16:00 UTC (permalink / raw) To: Michael Turquette, Stephen Boyd Cc: linux-kernel, linux-clk, linux-rtc, Alessandro Zummo, Alexandre Belloni, Maxime Ripard, Chen-Yu Tsai A future patch is going to change semantics of clk_register() so that clk_hw::init is guaranteed to be NULL after a clk is registered. Avoid referencing this member here so that we don't run into NULL pointer exceptions. Cc: Alessandro Zummo <a.zummo@towertech.it> Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> Cc: Maxime Ripard <maxime.ripard@bootlin.com> Cc: Chen-Yu Tsai <wens@csie.org> Signed-off-by: Stephen Boyd <sboyd@kernel.org> --- Please ack so I can take this through clk tree. drivers/rtc/rtc-sun6i.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/rtc/rtc-sun6i.c b/drivers/rtc/rtc-sun6i.c index c0e75c373605..d50ee023b559 100644 --- a/drivers/rtc/rtc-sun6i.c +++ b/drivers/rtc/rtc-sun6i.c @@ -279,7 +279,7 @@ static void __init sun6i_rtc_clk_init(struct device_node *node, of_property_read_string_index(node, "clock-output-names", 1, &clkout_name); - rtc->ext_losc = clk_register_gate(NULL, clkout_name, rtc->hw.init->name, + rtc->ext_losc = clk_register_gate(NULL, clkout_name, init.name, 0, rtc->base + SUN6I_LOSC_OUT_GATING, SUN6I_LOSC_OUT_GATING_EN_OFFSET, 0, &rtc->lock); -- Sent by a computer through tubes ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 3/4] rtc: sun6i: Don't reference clk_init_data after registration 2019-08-15 16:00 ` [PATCH 3/4] rtc: sun6i: " Stephen Boyd @ 2019-08-15 16:11 ` Chen-Yu Tsai 2019-08-15 21:59 ` Stephen Boyd ` (2 subsequent siblings) 3 siblings, 0 replies; 14+ messages in thread From: Chen-Yu Tsai @ 2019-08-15 16:11 UTC (permalink / raw) To: Stephen Boyd Cc: Michael Turquette, linux-kernel, linux-clk, linux-rtc, Alessandro Zummo, Alexandre Belloni, Maxime Ripard On Fri, Aug 16, 2019 at 12:00 AM Stephen Boyd <sboyd@kernel.org> wrote: > > A future patch is going to change semantics of clk_register() so that > clk_hw::init is guaranteed to be NULL after a clk is registered. Avoid > referencing this member here so that we don't run into NULL pointer > exceptions. > > Cc: Alessandro Zummo <a.zummo@towertech.it> > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> > Cc: Maxime Ripard <maxime.ripard@bootlin.com> > Cc: Chen-Yu Tsai <wens@csie.org> > Signed-off-by: Stephen Boyd <sboyd@kernel.org> Acked-by: Chen-Yu Tsai <wens@csie.org> ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/4] rtc: sun6i: Don't reference clk_init_data after registration 2019-08-15 16:00 ` [PATCH 3/4] rtc: sun6i: " Stephen Boyd 2019-08-15 16:11 ` Chen-Yu Tsai @ 2019-08-15 21:59 ` Stephen Boyd 2019-08-16 14:50 ` Alexandre Belloni 2019-08-16 17:20 ` Stephen Boyd 3 siblings, 0 replies; 14+ messages in thread From: Stephen Boyd @ 2019-08-15 21:59 UTC (permalink / raw) To: Michael Turquette, Stephen Boyd Cc: linux-kernel, linux-clk, linux-rtc, Alessandro Zummo, Alexandre Belloni, Maxime Ripard, Chen-Yu Tsai Quoting Stephen Boyd (2019-08-15 09:00:19) > A future patch is going to change semantics of clk_register() so that > clk_hw::init is guaranteed to be NULL after a clk is registered. Avoid > referencing this member here so that we don't run into NULL pointer > exceptions. > > Cc: Alessandro Zummo <a.zummo@towertech.it> > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> > Cc: Maxime Ripard <maxime.ripard@bootlin.com> > Cc: Chen-Yu Tsai <wens@csie.org> > Signed-off-by: Stephen Boyd <sboyd@kernel.org> > --- > Looks like this fixed the sunxi boot crashes in -next. I'll add a tag for kernelci credit. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/4] rtc: sun6i: Don't reference clk_init_data after registration 2019-08-15 16:00 ` [PATCH 3/4] rtc: sun6i: " Stephen Boyd 2019-08-15 16:11 ` Chen-Yu Tsai 2019-08-15 21:59 ` Stephen Boyd @ 2019-08-16 14:50 ` Alexandre Belloni 2019-08-16 17:20 ` Stephen Boyd 3 siblings, 0 replies; 14+ messages in thread From: Alexandre Belloni @ 2019-08-16 14:50 UTC (permalink / raw) To: Stephen Boyd Cc: Michael Turquette, linux-kernel, linux-clk, linux-rtc, Alessandro Zummo, Maxime Ripard, Chen-Yu Tsai On 15/08/2019 09:00:19-0700, Stephen Boyd wrote: > A future patch is going to change semantics of clk_register() so that > clk_hw::init is guaranteed to be NULL after a clk is registered. Avoid > referencing this member here so that we don't run into NULL pointer > exceptions. > > Cc: Alessandro Zummo <a.zummo@towertech.it> > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> > Cc: Maxime Ripard <maxime.ripard@bootlin.com> > Cc: Chen-Yu Tsai <wens@csie.org> > Signed-off-by: Stephen Boyd <sboyd@kernel.org> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com> > --- > > Please ack so I can take this through clk tree. > > drivers/rtc/rtc-sun6i.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/rtc/rtc-sun6i.c b/drivers/rtc/rtc-sun6i.c > index c0e75c373605..d50ee023b559 100644 > --- a/drivers/rtc/rtc-sun6i.c > +++ b/drivers/rtc/rtc-sun6i.c > @@ -279,7 +279,7 @@ static void __init sun6i_rtc_clk_init(struct device_node *node, > > of_property_read_string_index(node, "clock-output-names", 1, > &clkout_name); > - rtc->ext_losc = clk_register_gate(NULL, clkout_name, rtc->hw.init->name, > + rtc->ext_losc = clk_register_gate(NULL, clkout_name, init.name, > 0, rtc->base + SUN6I_LOSC_OUT_GATING, > SUN6I_LOSC_OUT_GATING_EN_OFFSET, 0, > &rtc->lock); > -- > Sent by a computer through tubes > -- Alexandre Belloni, Bootlin Embedded Linux and Kernel engineering https://bootlin.com ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/4] rtc: sun6i: Don't reference clk_init_data after registration 2019-08-15 16:00 ` [PATCH 3/4] rtc: sun6i: " Stephen Boyd ` (2 preceding siblings ...) 2019-08-16 14:50 ` Alexandre Belloni @ 2019-08-16 17:20 ` Stephen Boyd 3 siblings, 0 replies; 14+ messages in thread From: Stephen Boyd @ 2019-08-16 17:20 UTC (permalink / raw) To: Michael Turquette, Stephen Boyd Cc: linux-kernel, linux-clk, linux-rtc, Alessandro Zummo, Alexandre Belloni, Maxime Ripard, Chen-Yu Tsai Quoting Stephen Boyd (2019-08-15 09:00:19) > A future patch is going to change semantics of clk_register() so that > clk_hw::init is guaranteed to be NULL after a clk is registered. Avoid > referencing this member here so that we don't run into NULL pointer > exceptions. > > Cc: Alessandro Zummo <a.zummo@towertech.it> > Cc: Alexandre Belloni <alexandre.belloni@bootlin.com> > Cc: Maxime Ripard <maxime.ripard@bootlin.com> > Cc: Chen-Yu Tsai <wens@csie.org> > Signed-off-by: Stephen Boyd <sboyd@kernel.org> > --- Applied to clk-next ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 4/4] clk: qcom: Remove error prints from DFS registration 2019-08-15 16:00 [PATCH 0/4] Followup to "Make clk_hw::init NULL after clk registration" Stephen Boyd ` (2 preceding siblings ...) 2019-08-15 16:00 ` [PATCH 3/4] rtc: sun6i: " Stephen Boyd @ 2019-08-15 16:00 ` Stephen Boyd 2019-08-16 2:48 ` Taniya Das 2019-08-16 17:20 ` Stephen Boyd 2019-08-19 7:02 ` [PATCH 0/4] Followup to "Make clk_hw::init NULL after clk registration" Guillaume Tucker 4 siblings, 2 replies; 14+ messages in thread From: Stephen Boyd @ 2019-08-15 16:00 UTC (permalink / raw) To: Michael Turquette, Stephen Boyd; +Cc: linux-kernel, linux-clk, Taniya Das These aren't useful and they reference the init structure name. Let's just drop them. Cc: Taniya Das <tdas@codeaurora.org> Signed-off-by: Stephen Boyd <sboyd@kernel.org> --- drivers/clk/qcom/clk-rcg2.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c index 8c02bffe50df..161a6498ed5a 100644 --- a/drivers/clk/qcom/clk-rcg2.c +++ b/drivers/clk/qcom/clk-rcg2.c @@ -1105,8 +1105,6 @@ static int clk_rcg2_enable_dfs(const struct clk_rcg_dfs_data *data, rcg->freq_tbl = NULL; - pr_debug("DFS registered for clk %s\n", init->name); - return 0; } @@ -1117,12 +1115,8 @@ int qcom_cc_register_rcg_dfs(struct regmap *regmap, for (i = 0; i < len; i++) { ret = clk_rcg2_enable_dfs(&rcgs[i], regmap); - if (ret) { - const char *name = rcgs[i].init->name; - - pr_err("DFS register failed for clk %s\n", name); + if (ret) return ret; - } } return 0; -- Sent by a computer through tubes ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 4/4] clk: qcom: Remove error prints from DFS registration 2019-08-15 16:00 ` [PATCH 4/4] clk: qcom: Remove error prints from DFS registration Stephen Boyd @ 2019-08-16 2:48 ` Taniya Das 2019-08-16 17:20 ` Stephen Boyd 1 sibling, 0 replies; 14+ messages in thread From: Taniya Das @ 2019-08-16 2:48 UTC (permalink / raw) To: Stephen Boyd, Michael Turquette; +Cc: linux-kernel, linux-clk On 8/15/2019 9:30 PM, Stephen Boyd wrote: > These aren't useful and they reference the init structure name. Let's > just drop them. > > Cc: Taniya Das <tdas@codeaurora.org> > Signed-off-by: Stephen Boyd <sboyd@kernel.org> > --- Acked-by: Taniya Das <tdas@codeaurora.org> -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation. -- ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 4/4] clk: qcom: Remove error prints from DFS registration 2019-08-15 16:00 ` [PATCH 4/4] clk: qcom: Remove error prints from DFS registration Stephen Boyd 2019-08-16 2:48 ` Taniya Das @ 2019-08-16 17:20 ` Stephen Boyd 1 sibling, 0 replies; 14+ messages in thread From: Stephen Boyd @ 2019-08-16 17:20 UTC (permalink / raw) To: Michael Turquette, Stephen Boyd; +Cc: linux-kernel, linux-clk, Taniya Das Quoting Stephen Boyd (2019-08-15 09:00:20) > These aren't useful and they reference the init structure name. Let's > just drop them. > > Cc: Taniya Das <tdas@codeaurora.org> > Signed-off-by: Stephen Boyd <sboyd@kernel.org> > --- Applied to clk-next ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 0/4] Followup to "Make clk_hw::init NULL after clk registration" 2019-08-15 16:00 [PATCH 0/4] Followup to "Make clk_hw::init NULL after clk registration" Stephen Boyd ` (3 preceding siblings ...) 2019-08-15 16:00 ` [PATCH 4/4] clk: qcom: Remove error prints from DFS registration Stephen Boyd @ 2019-08-19 7:02 ` Guillaume Tucker 4 siblings, 0 replies; 14+ messages in thread From: Guillaume Tucker @ 2019-08-19 7:02 UTC (permalink / raw) To: Stephen Boyd, Michael Turquette Cc: linux-kernel, linux-clk, linux-rtc, bot, tomeu.vizoso, mgalka, broonie, matthew.hart, khilman, enric.balletbo, Sylwester Nawrocki, Alessandro Zummo, Alexandre Belloni, Chen-Yu Tsai, Jun Nie, Maxime Ripard, Shawn Guo, Sugaya Taichi, Taniya Das On 15/08/2019 17:00, Stephen Boyd wrote: > I found some more cases where the init structure is referenced from > within the clk_hw struct after clk_registration is called. I suspect the > rtc driver fix is useful to avoid crashes on Allwinner devices, reported > by kernel-ci. Please feel free to add this trailer where appropriate: Reported-by: "kernelci.org bot" <bot@kernelci.org> Thanks, Guillaume ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2019-08-19 7:02 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2019-08-15 16:00 [PATCH 0/4] Followup to "Make clk_hw::init NULL after clk registration" Stephen Boyd 2019-08-15 16:00 ` [PATCH 1/4] clk: milbeaut: Don't reference clk_init_data after registration Stephen Boyd 2019-08-16 17:20 ` Stephen Boyd 2019-08-15 16:00 ` [PATCH 2/4] clk: zx296718: " Stephen Boyd 2019-08-16 17:20 ` Stephen Boyd 2019-08-15 16:00 ` [PATCH 3/4] rtc: sun6i: " Stephen Boyd 2019-08-15 16:11 ` Chen-Yu Tsai 2019-08-15 21:59 ` Stephen Boyd 2019-08-16 14:50 ` Alexandre Belloni 2019-08-16 17:20 ` Stephen Boyd 2019-08-15 16:00 ` [PATCH 4/4] clk: qcom: Remove error prints from DFS registration Stephen Boyd 2019-08-16 2:48 ` Taniya Das 2019-08-16 17:20 ` Stephen Boyd 2019-08-19 7:02 ` [PATCH 0/4] Followup to "Make clk_hw::init NULL after clk registration" Guillaume Tucker
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).