sh: smp: Provide a generic IPI handler.
authorPaul Mundt <lethal@linux-sh.org>
Wed, 6 Aug 2008 09:02:48 +0000 (18:02 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 8 Sep 2008 01:35:02 +0000 (10:35 +0900)
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>
arch/sh/include/asm/smp.h
arch/sh/kernel/smp.c

index e2b79e6864e7f45f7f1826b22bcfa1b058fb4267..1292c6d3c53e1aadb1c4dddb2459974e35671ace 100644 (file)
@@ -26,6 +26,7 @@ extern int __cpu_logical_map[NR_CPUS];
 #define SMP_MSG_FUNCTION_SINGLE        2
 #define SMP_MSG_NR             3
 
+void smp_message_recv(unsigned int msg);
 void plat_smp_setup(void);
 void plat_prepare_cpus(unsigned int max_cpus);
 int plat_smp_processor_id(void);
index 60c50841143e26103b02a41c04d7ff863055663e..ebfdd364544f46761962cec9f53e29fae195f4c2 100644 (file)
@@ -3,7 +3,7 @@
  *
  * SMP support for the SuperH processors.
  *
- * Copyright (C) 2002 - 2007 Paul Mundt
+ * Copyright (C) 2002 - 2008 Paul Mundt
  * Copyright (C) 2006 - 2007 Akio Idehara
  *
  * 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)
        plat_send_ipi(cpu, SMP_MSG_FUNCTION_SINGLE);
 }
 
+void smp_message_recv(unsigned int msg)
+{
+       switch (msg) {
+       case SMP_MSG_FUNCTION:
+               generic_smp_call_function_interrupt();
+               break;
+       case SMP_MSG_RESCHEDULE:
+               break;
+       case SMP_MSG_FUNCTION_SINGLE:
+               generic_smp_call_function_single_interrupt();
+               break;
+       default:
+               printk(KERN_WARNING "SMP %d: %s(): unknown IPI %d\n",
+                      smp_processor_id(), __func__, msg);
+               break;
+       }
+}
+
 /* Not really SMP stuff ... */
 int setup_profiling_timer(unsigned int multiplier)
 {