sh: smp: Hook up a timer IPI stub.
authorPaul Mundt <lethal@linux-sh.org>
Wed, 6 Aug 2008 09:21:03 +0000 (18:21 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 8 Sep 2008 01:35:03 +0000 (10:35 +0900)
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/include/asm/smp.h
arch/sh/kernel/smp.c

index 5ebe0d09559ecae8a80bc4fb414aad5a2d50025a..9d22cda67c29ef7e8ea4a44f534d484b81fb8925 100644 (file)
@@ -21,19 +21,26 @@ extern int __cpu_number_map[NR_CPUS];
 extern int __cpu_logical_map[NR_CPUS];
 #define cpu_logical_map(cpu)  __cpu_logical_map[cpu]
 
-#define SMP_MSG_FUNCTION       0
-#define SMP_MSG_RESCHEDULE     1
-#define SMP_MSG_FUNCTION_SINGLE        2
-#define SMP_MSG_NR             3
+enum {
+       SMP_MSG_FUNCTION,
+       SMP_MSG_RESCHEDULE,
+       SMP_MSG_FUNCTION_SINGLE,
+       SMP_MSG_TIMER,
+
+       SMP_MSG_NR,     /* must be last */
+};
 
 void smp_message_recv(unsigned int msg);
+void smp_timer_broadcast(cpumask_t mask);
+
 void plat_smp_setup(void);
 void plat_prepare_cpus(unsigned int max_cpus);
 int plat_smp_processor_id(void);
 void plat_start_cpu(unsigned int cpu, unsigned long entry_point);
 void plat_send_ipi(unsigned int cpu, unsigned int message);
-extern void arch_send_call_function_single_ipi(int cpu);
-extern void arch_send_call_function_ipi(cpumask_t mask);
+
+void arch_send_call_function_single_ipi(int cpu);
+void arch_send_call_function_ipi(cpumask_t mask);
 
 #else
 
index ebfdd364544f46761962cec9f53e29fae195f4c2..9cb3734dbd49d3f24aeba3e09b5f7c87afb68f5f 100644 (file)
@@ -184,6 +184,21 @@ void arch_send_call_function_single_ipi(int cpu)
        plat_send_ipi(cpu, SMP_MSG_FUNCTION_SINGLE);
 }
 
+void smp_timer_broadcast(cpumask_t mask)
+{
+       int cpu;
+
+       for_each_cpu_mask(cpu, mask)
+               plat_send_ipi(cpu, SMP_MSG_TIMER);
+}
+
+static void ipi_timer(void)
+{
+       irq_enter();
+       /* XXX ... */
+       irq_exit();
+}
+
 void smp_message_recv(unsigned int msg)
 {
        switch (msg) {
@@ -195,6 +210,9 @@ void smp_message_recv(unsigned int msg)
        case SMP_MSG_FUNCTION_SINGLE:
                generic_smp_call_function_single_interrupt();
                break;
+       case SMP_MSG_TIMER:
+               ipi_timer();
+               break;
        default:
                printk(KERN_WARNING "SMP %d: %s(): unknown IPI %d\n",
                       smp_processor_id(), __func__, msg);