aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWill Deacon <will.deacon@arm.com>2013-02-01 05:17:57 -0500
committerWill Deacon <will.deacon@arm.com>2013-02-01 05:17:57 -0500
commit5b91ab0abc957145c3ff6be03eb9a3901797019f (patch)
treed79692eb324c0c18e425576e7a93ad05c4834272
parentd954896edb658cf72dd069d92b5235c06521ffab (diff)
parent3d06770eef43eaad606e77246bfcc7e82b1d9fb4 (diff)
Merge branch 'clocks/broadcast-arm' of git://linux-arm.org/linux-mr into for-rmk/broadcast
-rw-r--r--arch/arm/Kconfig1
-rw-r--r--arch/arm/kernel/smp.c13
2 files changed, 5 insertions, 9 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 67874b82a4ed..65ae7375c6c1 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -4,6 +4,7 @@ config ARM
4 select ARCH_BINFMT_ELF_RANDOMIZE_PIE 4 select ARCH_BINFMT_ELF_RANDOMIZE_PIE
5 select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE 5 select ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE
6 select ARCH_HAVE_CUSTOM_GPIO_H 6 select ARCH_HAVE_CUSTOM_GPIO_H
7 select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
7 select ARCH_WANT_IPC_PARSE_VERSION 8 select ARCH_WANT_IPC_PARSE_VERSION
8 select BUILDTIME_EXTABLE_SORT if MMU 9 select BUILDTIME_EXTABLE_SORT if MMU
9 select CPU_PM if (SUSPEND || CPU_IDLE) 10 select CPU_PM if (SUSPEND || CPU_IDLE)
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 84f4cbf652e5..b7e3b506219b 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)
475 */ 475 */
476static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent); 476static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent);
477 477
478static void ipi_timer(void)
479{
480 struct clock_event_device *evt = &__get_cpu_var(percpu_clockevent);
481 evt->event_handler(evt);
482}
483
484#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST 478#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
485static void smp_timer_broadcast(const struct cpumask *mask) 479void tick_broadcast(const struct cpumask *mask)
486{ 480{
487 smp_cross_call(mask, IPI_TIMER); 481 smp_cross_call(mask, IPI_TIMER);
488} 482}
@@ -530,7 +524,6 @@ static void __cpuinit percpu_timer_setup(void)
530 struct clock_event_device *evt = &per_cpu(percpu_clockevent, cpu); 524 struct clock_event_device *evt = &per_cpu(percpu_clockevent, cpu);
531 525
532 evt->cpumask = cpumask_of(cpu); 526 evt->cpumask = cpumask_of(cpu);
533 evt->broadcast = smp_timer_broadcast;
534 527
535 if (!lt_ops || lt_ops->setup(evt)) 528 if (!lt_ops || lt_ops->setup(evt))
536 broadcast_timer_setup(evt); 529 broadcast_timer_setup(evt);
@@ -596,11 +589,13 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
596 case IPI_WAKEUP: 589 case IPI_WAKEUP:
597 break; 590 break;
598 591
592#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
599 case IPI_TIMER: 593 case IPI_TIMER:
600 irq_enter(); 594 irq_enter();
601 ipi_timer(); 595 tick_receive_broadcast();
602 irq_exit(); 596 irq_exit();
603 break; 597 break;
598#endif
604 599
605 case IPI_RESCHEDULE: 600 case IPI_RESCHEDULE:
606 scheduler_ipi(); 601 scheduler_ipi();