aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2008-08-06 05:02:48 -0400
committerPaul Mundt <lethal@linux-sh.org>2008-09-07 21:35:02 -0400
commit173a44dd1f406e9aa6fcf46c83b7c972d10ec930 (patch)
tree61784c58c8e566f3717914761aeff5d8cc7c75be /arch/sh
parent04ec080dcaad7d3c6d0b40b599c8e63da618f784 (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.h1
-rw-r--r--arch/sh/kernel/smp.c20
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
29void smp_message_recv(unsigned int msg);
29void plat_smp_setup(void); 30void plat_smp_setup(void);
30void plat_prepare_cpus(unsigned int max_cpus); 31void plat_prepare_cpus(unsigned int max_cpus);
31int plat_smp_processor_id(void); 32int 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
187void 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 ... */
188int setup_profiling_timer(unsigned int multiplier) 206int setup_profiling_timer(unsigned int multiplier)
189{ 207{