aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2010-11-15 04:42:08 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2010-12-03 03:26:30 -0500
commitad3b6993b9c5482e8a2ec5aed181538c921fdcbd (patch)
treeec14d13777bc9b7d495929d74a83c36687ec4eab /arch/arm/kernel
parentd92e04713c6323e09a0d0fdfa0d7cbcedb175e49 (diff)
ARM: SMP: pass an ipi number to smp_cross_call()
This allows us to use smp_cross_call() to trigger a number of different software generated interrupts, rather than combining them all on one SGI. Recover the SGI number via do_IPI. Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r--arch/arm/kernel/entry-armv.S2
-rw-r--r--arch/arm/kernel/smp.c10
2 files changed, 3 insertions, 9 deletions
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index c09e3573c5de..955cf5f539ed 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -48,7 +48,7 @@
48 */ 48 */
49 ALT_SMP(test_for_ipi r0, r6, r5, lr) 49 ALT_SMP(test_for_ipi r0, r6, r5, lr)
50 ALT_UP_B(9997f) 50 ALT_UP_B(9997f)
51 movne r0, sp 51 movne r1, sp
52 adrne lr, BSYM(1b) 52 adrne lr, BSYM(1b)
53 bne do_IPI 53 bne do_IPI
54 54
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 8c1959590252..7a236db03fb5 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -404,7 +404,7 @@ static void send_ipi_message(const struct cpumask *mask, enum ipi_msg_type msg)
404 /* 404 /*
405 * Call the platform specific cross-CPU call function. 405 * Call the platform specific cross-CPU call function.
406 */ 406 */
407 smp_cross_call(mask); 407 smp_cross_call(mask, 1);
408 408
409 local_irq_restore(flags); 409 local_irq_restore(flags);
410} 410}
@@ -537,14 +537,8 @@ static void ipi_cpu_stop(unsigned int cpu)
537 537
538/* 538/*
539 * Main handler for inter-processor interrupts 539 * Main handler for inter-processor interrupts
540 *
541 * For ARM, the ipimask now only identifies a single
542 * category of IPI (Bit 1 IPIs have been replaced by a
543 * different mechanism):
544 *
545 * Bit 0 - Inter-processor function call
546 */ 540 */
547asmlinkage void __exception do_IPI(struct pt_regs *regs) 541asmlinkage void __exception do_IPI(int ipinr, struct pt_regs *regs)
548{ 542{
549 unsigned int cpu = smp_processor_id(); 543 unsigned int cpu = smp_processor_id();
550 struct ipi_data *ipi = &per_cpu(ipi_data, cpu); 544 struct ipi_data *ipi = &per_cpu(ipi_data, cpu);