2020-02-14 07:15:06

by Matheus Castello

[permalink] [raw]
Subject: [PATCH] clocksource: owl: Improve owl_timer_init fail messages

Adding error messages, in case of not having a defined clock property
and in case of an error in clocksource_mmio_init, which may not be
fatal, so just adding a pr_err to notify that it failed.

Signed-off-by: Matheus Castello <[email protected]>
---

Tested on my Caninos Labrador s500 based board. If the clock property is not
set this message would help debug:

...
[ 0.000000] Failed to get OF clock for clocksource
[ 0.000000] Failed to initialize '/soc/timer@b0168000': -2
[ 0.000000] timer_probe: no matching timers found
...

drivers/clocksource/timer-owl.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/clocksource/timer-owl.c b/drivers/clocksource/timer-owl.c
index 900fe736145d..f53596f9e86c 100644
--- a/drivers/clocksource/timer-owl.c
+++ b/drivers/clocksource/timer-owl.c
@@ -135,8 +135,10 @@ static int __init owl_timer_init(struct device_node *node)
}

clk = of_clk_get(node, 0);
- if (IS_ERR(clk))
+ if (IS_ERR(clk)) {
+ pr_err("Failed to get OF clock for clocksource\n");
return PTR_ERR(clk);
+ }

rate = clk_get_rate(clk);

@@ -144,8 +146,11 @@ static int __init owl_timer_init(struct device_node *node)
owl_timer_set_enabled(owl_clksrc_base, true);

sched_clock_register(owl_timer_sched_read, 32, rate);
- clocksource_mmio_init(owl_clksrc_base + OWL_Tx_VAL, node->name,
- rate, 200, 32, clocksource_mmio_readl_up);
+ ret = clocksource_mmio_init(owl_clksrc_base + OWL_Tx_VAL, node->name,
+ rate, 200, 32, clocksource_mmio_readl_up);
+
+ if (ret)
+ pr_err("Failed to register clocksource %d\n", ret);

owl_timer_reset(owl_clkevt_base);

--
2.25.0


2020-02-14 14:18:12

by Manivannan Sadhasivam

[permalink] [raw]
Subject: Re: [PATCH] clocksource: owl: Improve owl_timer_init fail messages

Hi,

Thanks for the patch!

On Fri, Feb 14, 2020 at 03:49:23AM -0300, Matheus Castello wrote:
> Adding error messages, in case of not having a defined clock property
> and in case of an error in clocksource_mmio_init, which may not be
> fatal, so just adding a pr_err to notify that it failed.
>
> Signed-off-by: Matheus Castello <[email protected]>
> ---
>
> Tested on my Caninos Labrador s500 based board. If the clock property is not
> set this message would help debug:
>
> ...
> [ 0.000000] Failed to get OF clock for clocksource
> [ 0.000000] Failed to initialize '/soc/timer@b0168000': -2
> [ 0.000000] timer_probe: no matching timers found
> ...
>
> drivers/clocksource/timer-owl.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/clocksource/timer-owl.c b/drivers/clocksource/timer-owl.c
> index 900fe736145d..f53596f9e86c 100644
> --- a/drivers/clocksource/timer-owl.c
> +++ b/drivers/clocksource/timer-owl.c
> @@ -135,8 +135,10 @@ static int __init owl_timer_init(struct device_node *node)
> }
>
> clk = of_clk_get(node, 0);
> - if (IS_ERR(clk))
> + if (IS_ERR(clk)) {
> + pr_err("Failed to get OF clock for clocksource\n");

No need to mention OF here. Just, "Failed to get clock for clocksource"
is good enough.

> return PTR_ERR(clk);
> + }
>
> rate = clk_get_rate(clk);
>
> @@ -144,8 +146,11 @@ static int __init owl_timer_init(struct device_node *node)
> owl_timer_set_enabled(owl_clksrc_base, true);
>
> sched_clock_register(owl_timer_sched_read, 32, rate);
> - clocksource_mmio_init(owl_clksrc_base + OWL_Tx_VAL, node->name,
> - rate, 200, 32, clocksource_mmio_readl_up);
> + ret = clocksource_mmio_init(owl_clksrc_base + OWL_Tx_VAL, node->name,
> + rate, 200, 32, clocksource_mmio_readl_up);
> +
> + if (ret)
> + pr_err("Failed to register clocksource %d\n", ret);
>

Do you want to continue if it fails? I'd bail out.

Thanks,
Mani

> owl_timer_reset(owl_clkevt_base);
>
> --
> 2.25.0
>

2020-02-14 14:47:32

by Andreas Färber

[permalink] [raw]
Subject: Re: [PATCH] clocksource: owl: Improve owl_timer_init fail messages

Hi,

Am Freitag, den 14.02.2020, 19:47 +0530 schrieb Manivannan Sadhasivam:
> On Fri, Feb 14, 2020 at 03:49:23AM -0300, Matheus Castello wrote:
> > Adding error messages, in case of not having a defined clock
> > property
> > and in case of an error in clocksource_mmio_init, which may not be
> > fatal, so just adding a pr_err to notify that it failed.
> >
> > Signed-off-by: Matheus Castello <[email protected]>
> > ---
> >
> > Tested on my Caninos Labrador s500 based board. If the clock
> > property is not
> > set this message would help debug:
> >
> > ...
> > [ 0.000000] Failed to get OF clock for clocksource
> > [ 0.000000] Failed to initialize '/soc/timer@b0168000': -2
> > [ 0.000000] timer_probe: no matching timers found
> > ...
> >
> > drivers/clocksource/timer-owl.c | 11 ++++++++---
> > 1 file changed, 8 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/clocksource/timer-owl.c
> > b/drivers/clocksource/timer-owl.c
> > index 900fe736145d..f53596f9e86c 100644
> > --- a/drivers/clocksource/timer-owl.c
> > +++ b/drivers/clocksource/timer-owl.c
> > @@ -135,8 +135,10 @@ static int __init owl_timer_init(struct
> > device_node *node)
> > }
> >
> > clk = of_clk_get(node, 0);
> > - if (IS_ERR(clk))
> > + if (IS_ERR(clk)) {
> > + pr_err("Failed to get OF clock for clocksource\n");
>
> No need to mention OF here. Just, "Failed to get clock for
> clocksource"
> is good enough.

We should be consistent then and output PTR_ERR(clk), too.

i.e., "Failed to get clock for clocksource (%d)\n"

>
> > return PTR_ERR(clk);
> > + }
> >
> > rate = clk_get_rate(clk);
> >
> > @@ -144,8 +146,11 @@ static int __init owl_timer_init(struct
> > device_node *node)
> > owl_timer_set_enabled(owl_clksrc_base, true);
> >
> > sched_clock_register(owl_timer_sched_read, 32, rate);
> > - clocksource_mmio_init(owl_clksrc_base + OWL_Tx_VAL, node->name,
> > - rate, 200, 32,
> > clocksource_mmio_readl_up);
> > + ret = clocksource_mmio_init(owl_clksrc_base + OWL_Tx_VAL, node-
> > >name,
> > + rate, 200, 32,
> > clocksource_mmio_readl_up);
> > +
> > + if (ret)
> > + pr_err("Failed to register clocksource %d\n", ret);

It's not a numeric clocksource, so for humans please use "... (%d)\n".

> >
>
> Do you want to continue if it fails? I'd bail out.

Agreed, but I'd suggest to check under which circumstances this can
actually fail and how other drivers handle it, given that it was not
checked before. Was this missed during original review, or is the
return value new?

Cheers,
Andreas

--
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer
HRB 36809 (AG Nürnberg)

2020-02-19 01:12:48

by Matheus Castello

[permalink] [raw]
Subject: [PATCH v2] clocksource: owl: Improve owl_timer_init fail messages

Check the return from clocksource_mmio_init, add messages in case of
an error and in case of not having a defined clock property.

Signed-off-by: Matheus Castello <[email protected]>
---

Thanks Manivannan and Andreas for the review.
Tested on my Caninos Labrador s500 based board.

Changes since v1:
(suggested by maintainers)
- Maintains consistency output PTR_ERR(clk)
- Returning in case of error on clocksource_mmio_init
- Use parentheses between the error code
- Remove OF mention

drivers/clocksource/timer-owl.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/clocksource/timer-owl.c b/drivers/clocksource/timer-owl.c
index 900fe736145d..820fbcc05503 100644
--- a/drivers/clocksource/timer-owl.c
+++ b/drivers/clocksource/timer-owl.c
@@ -135,8 +135,11 @@ static int __init owl_timer_init(struct device_node *node)
}

clk = of_clk_get(node, 0);
- if (IS_ERR(clk))
- return PTR_ERR(clk);
+ if (IS_ERR(clk)) {
+ ret = PTR_ERR(clk);
+ pr_err("Failed to get clock for clocksource (%d)\n", ret);
+ return ret;
+ }

rate = clk_get_rate(clk);

@@ -144,8 +147,12 @@ static int __init owl_timer_init(struct device_node *node)
owl_timer_set_enabled(owl_clksrc_base, true);

sched_clock_register(owl_timer_sched_read, 32, rate);
- clocksource_mmio_init(owl_clksrc_base + OWL_Tx_VAL, node->name,
- rate, 200, 32, clocksource_mmio_readl_up);
+ ret = clocksource_mmio_init(owl_clksrc_base + OWL_Tx_VAL, node->name,
+ rate, 200, 32, clocksource_mmio_readl_up);
+ if (ret) {
+ pr_err("Failed to register clocksource (%d)\n", ret);
+ return ret;
+ }

owl_timer_reset(owl_clkevt_base);

--
2.25.0

Subject: [tip: timers/core] clocksource/drivers/owl: Improve owl_timer_init fail messages

The following commit has been merged into the timers/core branch of tip:

Commit-ID: ad1ded9d2e3d1eb452ff58d325aadf237e187bd9
Gitweb: https://git.kernel.org/tip/ad1ded9d2e3d1eb452ff58d325aadf237e187bd9
Author: Matheus Castello <[email protected]>
AuthorDate: Tue, 18 Feb 2020 21:48:10 -03:00
Committer: Daniel Lezcano <[email protected]>
CommitterDate: Thu, 27 Feb 2020 09:42:00 +01:00

clocksource/drivers/owl: Improve owl_timer_init fail messages

Check the return from clocksource_mmio_init, add messages in case of
an error and in case of not having a defined clock property.

Signed-off-by: Matheus Castello <[email protected]>
Signed-off-by: Daniel Lezcano <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
---
drivers/clocksource/timer-owl.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/clocksource/timer-owl.c b/drivers/clocksource/timer-owl.c
index 900fe73..ac97420 100644
--- a/drivers/clocksource/timer-owl.c
+++ b/drivers/clocksource/timer-owl.c
@@ -135,8 +135,11 @@ static int __init owl_timer_init(struct device_node *node)
}

clk = of_clk_get(node, 0);
- if (IS_ERR(clk))
- return PTR_ERR(clk);
+ if (IS_ERR(clk)) {
+ ret = PTR_ERR(clk);
+ pr_err("Failed to get clock for clocksource (%d)\n", ret);
+ return ret;
+ }

rate = clk_get_rate(clk);

@@ -144,8 +147,12 @@ static int __init owl_timer_init(struct device_node *node)
owl_timer_set_enabled(owl_clksrc_base, true);

sched_clock_register(owl_timer_sched_read, 32, rate);
- clocksource_mmio_init(owl_clksrc_base + OWL_Tx_VAL, node->name,
- rate, 200, 32, clocksource_mmio_readl_up);
+ ret = clocksource_mmio_init(owl_clksrc_base + OWL_Tx_VAL, node->name,
+ rate, 200, 32, clocksource_mmio_readl_up);
+ if (ret) {
+ pr_err("Failed to register clocksource (%d)\n", ret);
+ return ret;
+ }

owl_timer_reset(owl_clkevt_base);