diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-11-15 04:42:08 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2010-12-03 03:26:30 -0500 |
commit | ad3b6993b9c5482e8a2ec5aed181538c921fdcbd (patch) | |
tree | ec14d13777bc9b7d495929d74a83c36687ec4eab /arch/arm/kernel | |
parent | d92e04713c6323e09a0d0fdfa0d7cbcedb175e49 (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.S | 2 | ||||
-rw-r--r-- | arch/arm/kernel/smp.c | 10 |
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 | */ |
547 | asmlinkage void __exception do_IPI(struct pt_regs *regs) | 541 | asmlinkage 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); |