Linux-Clk Archive on lore.kernel.org
 help / color / Atom feed
* [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	[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	[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	[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	[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 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 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 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

* 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

* 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

* 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, back to index

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

Linux-Clk Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-clk/0 linux-clk/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-clk linux-clk/ https://lore.kernel.org/linux-clk \
		linux-clk@vger.kernel.org linux-clk@archiver.kernel.org
	public-inbox-index linux-clk

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-clk


AGPL code for this site: git clone https://public-inbox.org/ public-inbox