Browse Source

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>
Paul Mundt 16 years ago
parent
commit
173a44dd1f
2 changed files with 20 additions and 1 deletions
  1. 1 0
      arch/sh/include/asm/smp.h
  2. 19 1
      arch/sh/kernel/smp.c

+ 1 - 0
arch/sh/include/asm/smp.h

@@ -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);

+ 19 - 1
arch/sh/kernel/smp.c

@@ -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)
 {