diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-21 18:40:16 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-21 18:40:16 -0500 |
commit | 8b5628ab83b671f96ac9f174c1bd51c92589fc82 (patch) | |
tree | 8446b0fce80923c3694fe075ffcde7e422bcf818 /arch/arm/kernel/smp.c | |
parent | a8f3740feb12928be1aad19659bf3527ea8d6d96 (diff) | |
parent | fe7dc7202d7d24fe211e0eecf531d8b79b655b3c (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.c | 13 |
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 | */ |
462 | static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent); | 462 | static DEFINE_PER_CPU(struct clock_event_device, percpu_clockevent); |
463 | 463 | ||
464 | static 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 |
471 | static void smp_timer_broadcast(const struct cpumask *mask) | 465 | void 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(); |