All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] clk: emit warning if fail to get parent clk
@ 2020-09-28  8:47 Jun Nie
  2020-10-07 23:53 ` Stephen Boyd
  0 siblings, 1 reply; 4+ messages in thread
From: Jun Nie @ 2020-09-28  8:47 UTC (permalink / raw)
  To: sboyd, mturquette, linux-clk; +Cc: shawn.guo, Jun Nie

Emit warning if fail to get parent clk to expose potential issue earlier.
For example, clk_hw_get_rate() will return 0 for a clock without parent core
while parent number is not zero. This cause opp always think it is switching
frequency from 0 to some other frequency. Crash may happen if we switch
from high frequency to low frequency and lower CPU voltage before clk rate
switching.

Signed-off-by: Jun Nie <jun.nie@linaro.org>
---
 drivers/clk/clk.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index 1a27e99ccb17..78b21b888e56 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -424,6 +424,7 @@ static void clk_core_fill_parent_index(struct clk_core *core, u8 index)
 {
 	struct clk_parent_map *entry = &core->parents[index];
 	struct clk_core *parent = ERR_PTR(-ENOENT);
+	int emit_warn = 0;
 
 	if (entry->hw) {
 		parent = entry->hw->core;
@@ -443,6 +444,12 @@ static void clk_core_fill_parent_index(struct clk_core *core, u8 index)
 	/* Only cache it if it's not an error */
 	if (!IS_ERR(parent))
 		entry->core = parent;
+	else if (parent != ERR_PTR(-EPROBE_DEFER))
+		emit_warn = 1;
+
+	if (emit_warn || (!parent && core->num_parents))
+		pr_warn("Fail to get indexed %d parent for clk %s.",
+			index, core->name);
 }
 
 static struct clk_core *clk_core_get_parent_by_index(struct clk_core *core,
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] clk: emit warning if fail to get parent clk
  2020-09-28  8:47 [PATCH] clk: emit warning if fail to get parent clk Jun Nie
@ 2020-10-07 23:53 ` Stephen Boyd
  2020-10-09  3:08   ` Jun Nie
  0 siblings, 1 reply; 4+ messages in thread
From: Stephen Boyd @ 2020-10-07 23:53 UTC (permalink / raw)
  To: Jun Nie, linux-clk, mturquette; +Cc: shawn.guo, Jun Nie

Quoting Jun Nie (2020-09-28 01:47:44)
> Emit warning if fail to get parent clk to expose potential issue earlier.
> For example, clk_hw_get_rate() will return 0 for a clock without parent core
> while parent number is not zero. This cause opp always think it is switching
> frequency from 0 to some other frequency. Crash may happen if we switch
> from high frequency to low frequency and lower CPU voltage before clk rate
> switching.

Thanks for the background reasoning. It's good to know what the problem
is. Is there any way to change OPP so it can handle this scenario
better?

> 
> Signed-off-by: Jun Nie <jun.nie@linaro.org>
> ---
>  drivers/clk/clk.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index 1a27e99ccb17..78b21b888e56 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -424,6 +424,7 @@ static void clk_core_fill_parent_index(struct clk_core *core, u8 index)
>  {
>         struct clk_parent_map *entry = &core->parents[index];
>         struct clk_core *parent = ERR_PTR(-ENOENT);
> +       int emit_warn = 0;
>  
>         if (entry->hw) {
>                 parent = entry->hw->core;
> @@ -443,6 +444,12 @@ static void clk_core_fill_parent_index(struct clk_core *core, u8 index)
>         /* Only cache it if it's not an error */
>         if (!IS_ERR(parent))
>                 entry->core = parent;
> +       else if (parent != ERR_PTR(-EPROBE_DEFER))
> +               emit_warn = 1;
> +
> +       if (emit_warn || (!parent && core->num_parents))
> +               pr_warn("Fail to get indexed %d parent for clk %s.",
> +                       index, core->name);

How do we know that this error isn't because the parent hasn't been
probed yet?

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] clk: emit warning if fail to get parent clk
  2020-10-07 23:53 ` Stephen Boyd
@ 2020-10-09  3:08   ` Jun Nie
  2020-10-12 19:25     ` Stephen Boyd
  0 siblings, 1 reply; 4+ messages in thread
From: Jun Nie @ 2020-10-09  3:08 UTC (permalink / raw)
  To: Stephen Boyd; +Cc: linux-clk, Michael Turquette, Shawn Guo

Stephen Boyd <sboyd@kernel.org> 于2020年10月8日周四 上午7:53写道:
>
> Quoting Jun Nie (2020-09-28 01:47:44)
> > Emit warning if fail to get parent clk to expose potential issue earlier.
> > For example, clk_hw_get_rate() will return 0 for a clock without parent core
> > while parent number is not zero. This cause opp always think it is switching
> > frequency from 0 to some other frequency. Crash may happen if we switch
> > from high frequency to low frequency and lower CPU voltage before clk rate
> > switching.
>
> Thanks for the background reasoning. It's good to know what the problem
> is. Is there any way to change OPP so it can handle this scenario
> better?

Maybe we can save latest CPU voltage and lower the voltage per opp voltage
requirement instead of clk rate requirement.
>
> >
> > Signed-off-by: Jun Nie <jun.nie@linaro.org>
> > ---
> >  drivers/clk/clk.c | 7 +++++++
> >  1 file changed, 7 insertions(+)
> >
> > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> > index 1a27e99ccb17..78b21b888e56 100644
> > --- a/drivers/clk/clk.c
> > +++ b/drivers/clk/clk.c
> > @@ -424,6 +424,7 @@ static void clk_core_fill_parent_index(struct clk_core *core, u8 index)
> >  {
> >         struct clk_parent_map *entry = &core->parents[index];
> >         struct clk_core *parent = ERR_PTR(-ENOENT);
> > +       int emit_warn = 0;
> >
> >         if (entry->hw) {
> >                 parent = entry->hw->core;
> > @@ -443,6 +444,12 @@ static void clk_core_fill_parent_index(struct clk_core *core, u8 index)
> >         /* Only cache it if it's not an error */
> >         if (!IS_ERR(parent))
> >                 entry->core = parent;
> > +       else if (parent != ERR_PTR(-EPROBE_DEFER))
> > +               emit_warn = 1;
> > +
> > +       if (emit_warn || (!parent && core->num_parents))
> > +               pr_warn("Fail to get indexed %d parent for clk %s.",
> > +                       index, core->name);
>
> How do we know that this error isn't because the parent hasn't been
> probed yet?

Yes, this is chance that failure to probe parent also cause the error.
But I had thought there may
be unnecessary error message before the successful probing, though I
did not see it. If you think
it does not a matter, next version can emit warning on all error.

Jun

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] clk: emit warning if fail to get parent clk
  2020-10-09  3:08   ` Jun Nie
@ 2020-10-12 19:25     ` Stephen Boyd
  0 siblings, 0 replies; 4+ messages in thread
From: Stephen Boyd @ 2020-10-12 19:25 UTC (permalink / raw)
  To: Jun Nie; +Cc: linux-clk, Michael Turquette, Shawn Guo

Quoting Jun Nie (2020-10-08 20:08:13)
> Stephen Boyd <sboyd@kernel.org> 于2020年10月8日周四 上午7:53写道:
> >
> > How do we know that this error isn't because the parent hasn't been
> > probed yet?
> 
> Yes, this is chance that failure to probe parent also cause the error.
> But I had thought there may
> be unnecessary error message before the successful probing, though I
> did not see it. If you think
> it does not a matter, next version can emit warning on all error.
> 

I suspect this warning can't be emitted here because we don't know if
the parent hasn't probed or if something else is wrong. It would be
better to fix OPP from what I can tell.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-10-12 19:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-28  8:47 [PATCH] clk: emit warning if fail to get parent clk Jun Nie
2020-10-07 23:53 ` Stephen Boyd
2020-10-09  3:08   ` Jun Nie
2020-10-12 19:25     ` Stephen Boyd

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.