diff options
author | Shawn Guo <shawn.guo@linaro.org> | 2011-10-06 10:18:14 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-10-17 04:02:43 -0400 |
commit | 0b5a1b95dcdfa451125132d5ce3f79a27ffb0950 (patch) | |
tree | 0a2ae9da15b1a9789bf3cc3ccff37b961dacfc1b | |
parent | 26a527e69d6e6077bff9e2cddcb08337ac33a52d (diff) |
ARM: 7123/1: smp: Add an IPI handler callable from C code
In order to be able to handle IPI directly from C code instead of
assembly code, introduce handle_IPI(), which is modeled after handle_IRQ().
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/include/asm/smp.h | 5 | ||||
-rw-r--r-- | arch/arm/kernel/smp.c | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/arch/arm/include/asm/smp.h b/arch/arm/include/asm/smp.h index 674ebcd337fe..0a17b62538c2 100644 --- a/arch/arm/include/asm/smp.h +++ b/arch/arm/include/asm/smp.h | |||
@@ -33,6 +33,11 @@ extern void show_ipi_list(struct seq_file *, int); | |||
33 | asmlinkage void do_IPI(int ipinr, struct pt_regs *regs); | 33 | asmlinkage void do_IPI(int ipinr, struct pt_regs *regs); |
34 | 34 | ||
35 | /* | 35 | /* |
36 | * Called from C code, this handles an IPI. | ||
37 | */ | ||
38 | void handle_IPI(int ipinr, struct pt_regs *regs); | ||
39 | |||
40 | /* | ||
36 | * Setup the set of possible CPUs (via set_cpu_possible) | 41 | * Setup the set of possible CPUs (via set_cpu_possible) |
37 | */ | 42 | */ |
38 | extern void smp_init_cpus(void); | 43 | extern void smp_init_cpus(void); |
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 3f12ce9b0796..2e49f1883fe9 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
@@ -587,6 +587,11 @@ static void ipi_cpu_stop(unsigned int cpu) | |||
587 | */ | 587 | */ |
588 | asmlinkage void __exception_irq_entry do_IPI(int ipinr, struct pt_regs *regs) | 588 | asmlinkage void __exception_irq_entry do_IPI(int ipinr, struct pt_regs *regs) |
589 | { | 589 | { |
590 | handle_IPI(ipinr, regs); | ||
591 | } | ||
592 | |||
593 | void handle_IPI(int ipinr, struct pt_regs *regs) | ||
594 | { | ||
590 | unsigned int cpu = smp_processor_id(); | 595 | unsigned int cpu = smp_processor_id(); |
591 | struct pt_regs *old_regs = set_irq_regs(regs); | 596 | struct pt_regs *old_regs = set_irq_regs(regs); |
592 | 597 | ||