diff options
author | Paul Mundt <lethal@linux-sh.org> | 2008-08-06 05:02:48 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2008-09-07 21:35:02 -0400 |
commit | 173a44dd1f406e9aa6fcf46c83b7c972d10ec930 (patch) | |
tree | 61784c58c8e566f3717914761aeff5d8cc7c75be /arch/sh | |
parent | 04ec080dcaad7d3c6d0b40b599c8e63da618f784 (diff) |
sh: smp: Provide a generic IPI handler.
This provides a generic smp_message_recv() routine (based on the PPC
one), that IPI IRQs can wrap in to.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/include/asm/smp.h | 1 | ||||
-rw-r--r-- | arch/sh/kernel/smp.c | 20 |
2 files changed, 20 insertions, 1 deletions
diff --git a/arch/sh/include/asm/smp.h b/arch/sh/include/asm/smp.h index e2b79e6864e7..1292c6d3c53e 100644 --- a/arch/sh/include/asm/smp.h +++ b/arch/sh/include/asm/smp.h | |||
@@ -26,6 +26,7 @@ extern int __cpu_logical_map[NR_CPUS]; | |||
26 | #define SMP_MSG_FUNCTION_SINGLE 2 | 26 | #define SMP_MSG_FUNCTION_SINGLE 2 |
27 | #define SMP_MSG_NR 3 | 27 | #define SMP_MSG_NR 3 |
28 | 28 | ||
29 | void smp_message_recv(unsigned int msg); | ||
29 | void plat_smp_setup(void); | 30 | void plat_smp_setup(void); |
30 | void plat_prepare_cpus(unsigned int max_cpus); | 31 | void plat_prepare_cpus(unsigned int max_cpus); |
31 | int plat_smp_processor_id(void); | 32 | int plat_smp_processor_id(void); |
diff --git a/arch/sh/kernel/smp.c b/arch/sh/kernel/smp.c index 60c50841143e..ebfdd364544f 100644 --- a/arch/sh/kernel/smp.c +++ b/arch/sh/kernel/smp.c | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * SMP support for the SuperH processors. | 4 | * SMP support for the SuperH processors. |
5 | * | 5 | * |
6 | * Copyright (C) 2002 - 2007 Paul Mundt | 6 | * Copyright (C) 2002 - 2008 Paul Mundt |
7 | * Copyright (C) 2006 - 2007 Akio Idehara | 7 | * Copyright (C) 2006 - 2007 Akio Idehara |
8 | * | 8 | * |
9 | * This file is subject to the terms and conditions of the GNU General Public | 9 | * This file is subject to the terms and conditions of the GNU General Public |
@@ -184,6 +184,24 @@ void arch_send_call_function_single_ipi(int cpu) | |||
184 | plat_send_ipi(cpu, SMP_MSG_FUNCTION_SINGLE); | 184 | plat_send_ipi(cpu, SMP_MSG_FUNCTION_SINGLE); |
185 | } | 185 | } |
186 | 186 | ||
187 | void smp_message_recv(unsigned int msg) | ||
188 | { | ||
189 | switch (msg) { | ||
190 | case SMP_MSG_FUNCTION: | ||
191 | generic_smp_call_function_interrupt(); | ||
192 | break; | ||
193 | case SMP_MSG_RESCHEDULE: | ||
194 | break; | ||
195 | case SMP_MSG_FUNCTION_SINGLE: | ||
196 | generic_smp_call_function_single_interrupt(); | ||
197 | break; | ||
198 | default: | ||
199 | printk(KERN_WARNING "SMP %d: %s(): unknown IPI %d\n", | ||
200 | smp_processor_id(), __func__, msg); | ||
201 | break; | ||
202 | } | ||
203 | } | ||
204 | |||
187 | /* Not really SMP stuff ... */ | 205 | /* Not really SMP stuff ... */ |
188 | int setup_profiling_timer(unsigned int multiplier) | 206 | int setup_profiling_timer(unsigned int multiplier) |
189 | { | 207 | { |