[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <e7cbb10903841ba23a93f71e7a06ae34a43adc70.1361166003.git.afzal@ti.com>
Date: Mon, 18 Feb 2013 12:00:09 +0530
From: Afzal Mohammed <afzal@...com>
To: <linux-omap@...r.kernel.org>,
<linux-arm-kernel@...ts.infradead.org>,
<devicetree-discuss@...ts.ozlabs.org>, <linux-doc@...r.kernel.org>,
<linux-kernel@...r.kernel.org>
CC: Russell King <linux@....linux.org.uk>,
Tony Lindgren <tony@...mide.com>,
Marc Zyngier <marc.zyngier@....com>,
Nicolas Pitre <nico@...aro.org>,
Santosh Shilimkar <santosh.shilimkar@...com>,
Will Deacon <will.deacon@....com>,
Linus Walleij <linus.walleij@...aro.org>,
Rob Herring <rob.herring@...xeda.com>,
Grant Likely <grant.likely@...retlab.ca>,
Rob Landley <rob@...dley.net>, Sekhar Nori <nsekhar@...com>,
Syed Mohammed Khasim <khasim@...com>
Subject: [RFC 1/8] ARM: localtimer: return percpu clkevt on register
Return percpu clock event on local timer register. It is the boot cpu
that calls this and it can use the returned percpu clock event to
register a clock event in the case of SMP configuration with one core.
This helps to have a booting Kernel even if no other timer is
registered for clock tick.
Signed-off-by: Afzal Mohammed <afzal@...com>
---
arch/arm/include/asm/localtimer.h | 7 ++++---
arch/arm/kernel/smp.c | 8 ++++----
arch/arm/kernel/smp_twd.c | 5 +++--
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/arch/arm/include/asm/localtimer.h b/arch/arm/include/asm/localtimer.h
index f77ffc1..c3f89c0 100644
--- a/arch/arm/include/asm/localtimer.h
+++ b/arch/arm/include/asm/localtimer.h
@@ -23,11 +23,12 @@ struct local_timer_ops {
/*
* Register a local timer driver
*/
-int local_timer_register(struct local_timer_ops *);
+struct clock_event_device *local_timer_register(struct local_timer_ops *);
#else
-static inline int local_timer_register(struct local_timer_ops *ops)
+static inline
+struct clock_event_device *local_timer_register(struct local_timer_ops *ops)
{
- return -ENXIO;
+ return ERR_PTR(-ENXIO);
}
#endif
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 5f73f70..42d95d6 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -491,16 +491,16 @@ static void __cpuinit broadcast_timer_setup(struct clock_event_device *evt)
static struct local_timer_ops *lt_ops;
#ifdef CONFIG_LOCAL_TIMERS
-int local_timer_register(struct local_timer_ops *ops)
+struct clock_event_device *local_timer_register(struct local_timer_ops *ops)
{
if (!is_smp() || !setup_max_cpus)
- return -ENXIO;
+ return ERR_PTR(-ENXIO);
if (lt_ops)
- return -EBUSY;
+ return ERR_PTR(-EBUSY);
lt_ops = ops;
- return 0;
+ return &per_cpu(percpu_clockevent, smp_processor_id());
}
#endif
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c
index c092115..616268c 100644
--- a/arch/arm/kernel/smp_twd.c
+++ b/arch/arm/kernel/smp_twd.c
@@ -315,6 +315,7 @@ static struct local_timer_ops twd_lt_ops __cpuinitdata = {
static int __init twd_local_timer_common_register(struct device_node *np)
{
int err;
+ struct clock_event_device *evt;
twd_evt = alloc_percpu(struct clock_event_device *);
if (!twd_evt) {
@@ -328,8 +329,8 @@ static int __init twd_local_timer_common_register(struct device_node *np)
goto out_free;
}
- err = local_timer_register(&twd_lt_ops);
- if (err)
+ evt = local_timer_register(&twd_lt_ops);
+ if (IS_ERR(evt))
goto out_irq;
twd_get_clock(np);
--
1.7.12
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists