diff options
author | Will Deacon <will.deacon@arm.com> | 2013-02-01 05:17:57 -0500 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2013-02-01 05:17:57 -0500 |
commit | 5b91ab0abc957145c3ff6be03eb9a3901797019f (patch) | |
tree | d79692eb324c0c18e425576e7a93ad05c4834272 | |
parent | d954896edb658cf72dd069d92b5235c06521ffab (diff) | |
parent | 3d06770eef43eaad606e77246bfcc7e82b1d9fb4 (diff) |
Merge branch 'clocks/broadcast-arm' of git://linux-arm.org/linux-mr into for-rmk/broadcast
-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 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 | */ |
476 | static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent); | 476 | static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent); |
477 | 477 | ||
478 | static 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 |
485 | static void smp_timer_broadcast(const struct cpumask *mask) | 479 | void 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(); |