diff options
author | Olof Johansson <olof@lixom.net> | 2013-02-11 09:03:05 -0800 |
---|---|---|
committer | Olof Johansson <olof@lixom.net> | 2013-02-11 09:03:05 -0800 |
commit | 3ddc0e1a7fd2fc222a6c87654af1cf059acdd1ec (patch) | |
tree | 155ff10097da85d2b37d6bb77464c0a5753a34f7 /arch/arm | |
parent | 655e194cfee8ba89634228f97f1310df41b45cbb (diff) | |
parent | 5b91ab0abc957145c3ff6be03eb9a3901797019f (diff) | |
download | op-kernel-dev-3ddc0e1a7fd2fc222a6c87654af1cf059acdd1ec.zip op-kernel-dev-3ddc0e1a7fd2fc222a6c87654af1cf059acdd1ec.tar.gz |
Merge branch 'for-rmk/broadcast' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into next/virt
* 'for-rmk/broadcast' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux:
arm: Add generic timer broadcast support
arm: Use generic timer broadcast receiver
clockevents: Add generic timer broadcast function
clockevents: Add generic timer broadcast receiver
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/Kconfig | 1 | ||||
-rw-r--r-- | arch/arm/kernel/smp.c | 13 |
2 files changed, 5 insertions, 9 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index e0627cd..35b6756 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -4,6 +4,7 @@ config ARM select ARCH_BINFMT_ELF_RANDOMIZE_PIE select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE select ARCH_HAVE_CUSTOM_GPIO_H + select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST select ARCH_WANT_IPC_PARSE_VERSION select BUILDTIME_EXTABLE_SORT if MMU select CPU_PM if (SUSPEND || CPU_IDLE) diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 84f4cbf..b7e3b50 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -475,14 +475,8 @@ u64 smp_irq_stat_cpu(unsigned int cpu) */ static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent); -static void ipi_timer(void) -{ - struct clock_event_device *evt = &__get_cpu_var(percpu_clockevent); - evt->event_handler(evt); -} - #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST -static void smp_timer_broadcast(const struct cpumask *mask) +void tick_broadcast(const struct cpumask *mask) { smp_cross_call(mask, IPI_TIMER); } @@ -530,7 +524,6 @@ static void __cpuinit percpu_timer_setup(void) struct clock_event_device *evt = &per_cpu(percpu_clockevent, cpu); evt->cpumask = cpumask_of(cpu); - evt->broadcast = smp_timer_broadcast; if (!lt_ops || lt_ops->setup(evt)) broadcast_timer_setup(evt); @@ -596,11 +589,13 @@ void handle_IPI(int ipinr, struct pt_regs *regs) case IPI_WAKEUP: break; +#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST case IPI_TIMER: irq_enter(); - ipi_timer(); + tick_receive_broadcast(); irq_exit(); break; +#endif case IPI_RESCHEDULE: scheduler_ipi(); |