aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/smp.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-02-21 18:40:16 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-21 18:40:16 -0500
commit8b5628ab83b671f96ac9f174c1bd51c92589fc82 (patch)
tree8446b0fce80923c3694fe075ffcde7e422bcf818 /arch/arm/kernel/smp.c
parenta8f3740feb12928be1aad19659bf3527ea8d6d96 (diff)
parentfe7dc7202d7d24fe211e0eecf531d8b79b655b3c (diff)
Merge tag 'virt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM virtualization changes: "This contains parts of the ARM KVM support that have dependencies on other patches merged through the arm-soc tree. In combination with patches coming through Russell's tree, this will finally add full support for the kernel based virtual machine on ARM, which has been awaited for some time now. Further, we now have a separate platform for virtual machines and qemu booting that is used by both Xen and KVM, separating these from the Versatile Express reference implementation. Obviously, this new platform is multiplatform capable so it can be combined with existing machines in the same kernel." * tag 'virt' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (38 commits) ARM: arch_timer: include linux/errno.h arm: arch_timer: add missing inline in stub function ARM: KVM: arch_timers: Wire the init code and config option ARM: KVM: arch_timers: Add timer world switch ARM: KVM: arch_timers: Add guest timer core support ARM: KVM: Add VGIC configuration option ARM: KVM: VGIC initialisation code ARM: KVM: VGIC control interface world switch ARM: KVM: VGIC interrupt injection ARM: KVM: vgic: retire queued, disabled interrupts ARM: KVM: VGIC virtual CPU interface management ARM: KVM: VGIC distributor handling ARM: KVM: VGIC accept vcpu and dist base addresses from user space ARM: KVM: Initial VGIC infrastructure code ARM: KVM: Keep track of currently running vcpus KVM: ARM: Introduce KVM_ARM_SET_DEVICE_ADDR ioctl ARM: gic: add __ASSEMBLY__ guard to C definitions ARM: gic: define GICH offsets for VGIC support ARM: gic: add missing distributor defintions ARM: mach-virt: fixup machine descriptor after removal of sys_timer ...
Diffstat (limited to 'arch/arm/kernel/smp.c')
-rw-r--r--arch/arm/kernel/smp.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 60340fa561d4..5f73f7018f50 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -461,14 +461,8 @@ u64 smp_irq_stat_cpu(unsigned int cpu)
461 */ 461 */
462static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent); 462static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent);
463 463
464static void ipi_timer(void)
465{
466 struct clock_event_device *evt = &__get_cpu_var(percpu_clockevent);
467 evt->event_handler(evt);
468}
469
470#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST 464#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
471static void smp_timer_broadcast(const struct cpumask *mask) 465void tick_broadcast(const struct cpumask *mask)
472{ 466{
473 smp_cross_call(mask, IPI_TIMER); 467 smp_cross_call(mask, IPI_TIMER);
474} 468}
@@ -516,7 +510,6 @@ static void __cpuinit percpu_timer_setup(void)
516 struct clock_event_device *evt = &per_cpu(percpu_clockevent, cpu); 510 struct clock_event_device *evt = &per_cpu(percpu_clockevent, cpu);
517 511
518 evt->cpumask = cpumask_of(cpu); 512 evt->cpumask = cpumask_of(cpu);
519 evt->broadcast = smp_timer_broadcast;
520 513
521 if (!lt_ops || lt_ops->setup(evt)) 514 if (!lt_ops || lt_ops->setup(evt))
522 broadcast_timer_setup(evt); 515 broadcast_timer_setup(evt);
@@ -582,11 +575,13 @@ void handle_IPI(int ipinr, struct pt_regs *regs)
582 case IPI_WAKEUP: 575 case IPI_WAKEUP:
583 break; 576 break;
584 577
578#ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
585 case IPI_TIMER: 579 case IPI_TIMER:
586 irq_enter(); 580 irq_enter();
587 ipi_timer(); 581 tick_receive_broadcast();
588 irq_exit(); 582 irq_exit();
589 break; 583 break;
584#endif
590 585
591 case IPI_RESCHEDULE: 586 case IPI_RESCHEDULE:
592 scheduler_ipi(); 587 scheduler_ipi();