From: Krzysztof Kozlowski <k.kozlowski@samsung.com>
To: Daniel Lezcano <daniel.lezcano@linaro.org>, tglx@linutronix.de
Cc: linux-kernel@vger.kernel.org, Kukjin Kim <kgene@kernel.org>,
"moderated list:ARM/SAMSUNG EXYNO..."
<linux-arm-kernel@lists.infradead.org>,
"moderated list:ARM/SAMSUNG EXYNO..."
<linux-samsung-soc@vger.kernel.org>
Subject: Re: [PATCH 5/9] clocksource/drivers/exynos_mct: Convert init function to return error
Date: Mon, 06 Jun 2016 12:51:56 +0200 [thread overview]
Message-ID: <575555CC.1020906@samsung.com> (raw)
In-Reply-To: <1464770093-12667-6-git-send-email-daniel.lezcano@linaro.org>
On 06/01/2016 10:34 AM, Daniel Lezcano wrote:
> The init functions do not return any error. They behave as the following:
>
> - panic, thus leading to a kernel crash while another timer may work and
> make the system boot up correctly
>
> or
>
> - print an error and let the caller unaware if the state of the system
>
> Change that by converting the init functions to return an error conforming
> to the CLOCKSOURCE_OF_RET prototype.
>
> Proper error handling (rollback, errno value) will be changed later case
> by case, thus this change just return back an error or success in the init
> function.
I don't see the benefits of this change alone. You are replacing one
non-return code to another always-return-success code. The effect is
exactly the same. It would make sense to change it to CLOCKSOURCE_OF_RET
along with proper error handling.
Best regards,
Krzysztof
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> ---
> drivers/clocksource/exynos_mct.c | 36 ++++++++++++++++++++++++------------
> 1 file changed, 24 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
> index be09bc0..f6caed0 100644
> --- a/drivers/clocksource/exynos_mct.c
> +++ b/drivers/clocksource/exynos_mct.c
> @@ -232,7 +232,7 @@ static cycles_t exynos4_read_current_timer(void)
> return exynos4_read_count_32();
> }
>
> -static void __init exynos4_clocksource_init(void)
> +static int __init exynos4_clocksource_init(void)
> {
> exynos4_mct_frc_start();
>
> @@ -244,6 +244,8 @@ static void __init exynos4_clocksource_init(void)
> panic("%s: can't register clocksource\n", mct_frc.name);
>
> sched_clock_register(exynos4_read_sched_clock, 32, clk_rate);
> +
> + return 0;
> }
>
> static void exynos4_mct_comp0_stop(void)
> @@ -335,12 +337,14 @@ static struct irqaction mct_comp_event_irq = {
> .dev_id = &mct_comp_device,
> };
>
> -static void exynos4_clockevent_init(void)
> +static int exynos4_clockevent_init(void)
> {
> mct_comp_device.cpumask = cpumask_of(0);
> clockevents_config_and_register(&mct_comp_device, clk_rate,
> 0xf, 0xffffffff);
> setup_irq(mct_irqs[MCT_G0_IRQ], &mct_comp_event_irq);
> +
> + return 0;
> }
>
> static DEFINE_PER_CPU(struct mct_clock_event_device, percpu_mct_tick);
> @@ -516,7 +520,7 @@ static struct notifier_block exynos4_mct_cpu_nb = {
> .notifier_call = exynos4_mct_cpu_notify,
> };
>
> -static void __init exynos4_timer_resources(struct device_node *np, void __iomem *base)
> +static int __init exynos4_timer_resources(struct device_node *np, void __iomem *base)
> {
> int err, cpu;
> struct mct_clock_event_device *mevt = this_cpu_ptr(&percpu_mct_tick);
> @@ -572,15 +576,17 @@ static void __init exynos4_timer_resources(struct device_node *np, void __iomem
>
> /* Immediately configure the timer on the boot CPU */
> exynos4_local_timer_setup(mevt);
> - return;
> + return 0;
>
> out_irq:
> free_percpu_irq(mct_irqs[MCT_L0_IRQ], &percpu_mct_tick);
> + return err;
> }
>
> -static void __init mct_init_dt(struct device_node *np, unsigned int int_type)
> +static int __init mct_init_dt(struct device_node *np, unsigned int int_type)
> {
> u32 nr_irqs, i;
> + int ret;
>
> mct_int_type = int_type;
>
> @@ -600,20 +606,26 @@ static void __init mct_init_dt(struct device_node *np, unsigned int int_type)
> for (i = MCT_L0_IRQ; i < nr_irqs; i++)
> mct_irqs[i] = irq_of_parse_and_map(np, i);
>
> - exynos4_timer_resources(np, of_iomap(np, 0));
> - exynos4_clocksource_init();
> - exynos4_clockevent_init();
> + ret = exynos4_timer_resources(np, of_iomap(np, 0));
> + if (ret)
> + return ret;
> +
> + ret = exynos4_clocksource_init();
> + if (ret)
> + return ret;
> +
> + return exynos4_clockevent_init();
> }
>
>
> -static void __init mct_init_spi(struct device_node *np)
> +static int __init mct_init_spi(struct device_node *np)
> {
> return mct_init_dt(np, MCT_INT_SPI);
> }
>
> -static void __init mct_init_ppi(struct device_node *np)
> +static int __init mct_init_ppi(struct device_node *np)
> {
> return mct_init_dt(np, MCT_INT_PPI);
> }
> -CLOCKSOURCE_OF_DECLARE(exynos4210, "samsung,exynos4210-mct", mct_init_spi);
> -CLOCKSOURCE_OF_DECLARE(exynos4412, "samsung,exynos4412-mct", mct_init_ppi);
> +CLOCKSOURCE_OF_DECLARE_RET(exynos4210, "samsung,exynos4210-mct", mct_init_spi);
> +CLOCKSOURCE_OF_DECLARE_RET(exynos4412, "samsung,exynos4412-mct", mct_init_ppi);
>
WARNING: multiple messages have this Message-ID (diff)
From: k.kozlowski@samsung.com (Krzysztof Kozlowski)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 5/9] clocksource/drivers/exynos_mct: Convert init function to return error
Date: Mon, 06 Jun 2016 12:51:56 +0200 [thread overview]
Message-ID: <575555CC.1020906@samsung.com> (raw)
In-Reply-To: <1464770093-12667-6-git-send-email-daniel.lezcano@linaro.org>
On 06/01/2016 10:34 AM, Daniel Lezcano wrote:
> The init functions do not return any error. They behave as the following:
>
> - panic, thus leading to a kernel crash while another timer may work and
> make the system boot up correctly
>
> or
>
> - print an error and let the caller unaware if the state of the system
>
> Change that by converting the init functions to return an error conforming
> to the CLOCKSOURCE_OF_RET prototype.
>
> Proper error handling (rollback, errno value) will be changed later case
> by case, thus this change just return back an error or success in the init
> function.
I don't see the benefits of this change alone. You are replacing one
non-return code to another always-return-success code. The effect is
exactly the same. It would make sense to change it to CLOCKSOURCE_OF_RET
along with proper error handling.
Best regards,
Krzysztof
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> ---
> drivers/clocksource/exynos_mct.c | 36 ++++++++++++++++++++++++------------
> 1 file changed, 24 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
> index be09bc0..f6caed0 100644
> --- a/drivers/clocksource/exynos_mct.c
> +++ b/drivers/clocksource/exynos_mct.c
> @@ -232,7 +232,7 @@ static cycles_t exynos4_read_current_timer(void)
> return exynos4_read_count_32();
> }
>
> -static void __init exynos4_clocksource_init(void)
> +static int __init exynos4_clocksource_init(void)
> {
> exynos4_mct_frc_start();
>
> @@ -244,6 +244,8 @@ static void __init exynos4_clocksource_init(void)
> panic("%s: can't register clocksource\n", mct_frc.name);
>
> sched_clock_register(exynos4_read_sched_clock, 32, clk_rate);
> +
> + return 0;
> }
>
> static void exynos4_mct_comp0_stop(void)
> @@ -335,12 +337,14 @@ static struct irqaction mct_comp_event_irq = {
> .dev_id = &mct_comp_device,
> };
>
> -static void exynos4_clockevent_init(void)
> +static int exynos4_clockevent_init(void)
> {
> mct_comp_device.cpumask = cpumask_of(0);
> clockevents_config_and_register(&mct_comp_device, clk_rate,
> 0xf, 0xffffffff);
> setup_irq(mct_irqs[MCT_G0_IRQ], &mct_comp_event_irq);
> +
> + return 0;
> }
>
> static DEFINE_PER_CPU(struct mct_clock_event_device, percpu_mct_tick);
> @@ -516,7 +520,7 @@ static struct notifier_block exynos4_mct_cpu_nb = {
> .notifier_call = exynos4_mct_cpu_notify,
> };
>
> -static void __init exynos4_timer_resources(struct device_node *np, void __iomem *base)
> +static int __init exynos4_timer_resources(struct device_node *np, void __iomem *base)
> {
> int err, cpu;
> struct mct_clock_event_device *mevt = this_cpu_ptr(&percpu_mct_tick);
> @@ -572,15 +576,17 @@ static void __init exynos4_timer_resources(struct device_node *np, void __iomem
>
> /* Immediately configure the timer on the boot CPU */
> exynos4_local_timer_setup(mevt);
> - return;
> + return 0;
>
> out_irq:
> free_percpu_irq(mct_irqs[MCT_L0_IRQ], &percpu_mct_tick);
> + return err;
> }
>
> -static void __init mct_init_dt(struct device_node *np, unsigned int int_type)
> +static int __init mct_init_dt(struct device_node *np, unsigned int int_type)
> {
> u32 nr_irqs, i;
> + int ret;
>
> mct_int_type = int_type;
>
> @@ -600,20 +606,26 @@ static void __init mct_init_dt(struct device_node *np, unsigned int int_type)
> for (i = MCT_L0_IRQ; i < nr_irqs; i++)
> mct_irqs[i] = irq_of_parse_and_map(np, i);
>
> - exynos4_timer_resources(np, of_iomap(np, 0));
> - exynos4_clocksource_init();
> - exynos4_clockevent_init();
> + ret = exynos4_timer_resources(np, of_iomap(np, 0));
> + if (ret)
> + return ret;
> +
> + ret = exynos4_clocksource_init();
> + if (ret)
> + return ret;
> +
> + return exynos4_clockevent_init();
> }
>
>
> -static void __init mct_init_spi(struct device_node *np)
> +static int __init mct_init_spi(struct device_node *np)
> {
> return mct_init_dt(np, MCT_INT_SPI);
> }
>
> -static void __init mct_init_ppi(struct device_node *np)
> +static int __init mct_init_ppi(struct device_node *np)
> {
> return mct_init_dt(np, MCT_INT_PPI);
> }
> -CLOCKSOURCE_OF_DECLARE(exynos4210, "samsung,exynos4210-mct", mct_init_spi);
> -CLOCKSOURCE_OF_DECLARE(exynos4412, "samsung,exynos4412-mct", mct_init_ppi);
> +CLOCKSOURCE_OF_DECLARE_RET(exynos4210, "samsung,exynos4210-mct", mct_init_spi);
> +CLOCKSOURCE_OF_DECLARE_RET(exynos4412, "samsung,exynos4412-mct", mct_init_ppi);
>
next prev parent reply other threads:[~2016-06-06 10:51 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-01 8:34 [PATCH 0/9] clocksource/drivers/clksrc-of: Improve error handling Daniel Lezcano
2016-06-01 8:34 ` [PATCH 1/9] of: Add a new macro to declare_of for one parameter function returning a value Daniel Lezcano
2016-06-01 8:34 ` Daniel Lezcano
[not found] ` <1464770093-12667-2-git-send-email-daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2016-06-14 7:41 ` Daniel Lezcano
2016-06-14 7:41 ` Daniel Lezcano
2016-06-01 8:34 ` [PATCH 2/9] clocksource/drivers/clksrc-probe: Introduce init functions with return code Daniel Lezcano
2016-06-01 8:34 ` Daniel Lezcano
[not found] ` <1464770093-12667-1-git-send-email-daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2016-06-01 8:34 ` [PATCH 3/9] clocksource/drivers/rockchip_timer: Convert init function to return error Daniel Lezcano
2016-06-01 8:34 ` Daniel Lezcano
2016-06-01 8:34 ` Daniel Lezcano
2016-06-01 8:34 ` [PATCH 4/9] clocksource/drivers/mkt_timer: " Daniel Lezcano
2016-06-01 8:34 ` Daniel Lezcano
2016-06-01 8:34 ` Daniel Lezcano
2016-06-01 8:34 ` [PATCH 5/9] clocksource/drivers/exynos_mct: " Daniel Lezcano
2016-06-01 8:34 ` Daniel Lezcano
2016-06-01 8:34 ` Daniel Lezcano
2016-06-06 10:51 ` Krzysztof Kozlowski [this message]
2016-06-06 10:51 ` Krzysztof Kozlowski
2016-06-06 11:23 ` Daniel Lezcano
2016-06-06 11:23 ` Daniel Lezcano
2016-06-06 11:28 ` Krzysztof Kozlowski
2016-06-06 11:28 ` Krzysztof Kozlowski
2016-06-01 8:34 ` [PATCH 6/9] clocksource/drivers/asm9260: " Daniel Lezcano
2016-06-01 8:34 ` [PATCH 7/9] clocksource/drivers/cadence_ttc: " Daniel Lezcano
2016-06-01 8:34 ` Daniel Lezcano
2016-06-01 14:36 ` Sören Brinkmann
2016-06-01 14:36 ` Sören Brinkmann
2016-06-01 14:43 ` Daniel Lezcano
2016-06-01 14:43 ` Daniel Lezcano
2016-06-01 8:34 ` [PATCH 8/9] clocksource/drivers/st_lpc: " Daniel Lezcano
2016-06-01 8:34 ` Daniel Lezcano
2016-06-01 8:34 ` [PATCH 9/9] clocksource/drivers/dw_apb_timer: " Daniel Lezcano
2016-06-07 9:54 ` [PATCH 0/9] clocksource/drivers/clksrc-of: Improve error handling Geert Uytterhoeven
2016-06-07 11:35 ` Daniel Lezcano
2016-06-07 22:23 ` Daniel Lezcano
2016-06-08 14:10 ` Daniel Lezcano
2016-06-09 7:46 ` Geert Uytterhoeven
2016-06-09 7:49 ` Daniel Lezcano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=575555CC.1020906@samsung.com \
--to=k.kozlowski@samsung.com \
--cc=daniel.lezcano@linaro.org \
--cc=kgene@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.