powerpc: Little endian SMP IPI demux
authorAnton Blanchard <anton@samba.org>
Tue, 6 Aug 2013 16:01:48 +0000 (02:01 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 14 Aug 2013 05:33:37 +0000 (15:33 +1000)
Add little endian support for demuxing SMP IPIs

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/smp.c

index d9d8bb0f44546a5de5d089ffc2178beaa7704abf..442d8e23f8f4088368c6ebda73375a28de2ce66a 100644 (file)
@@ -232,6 +232,12 @@ void smp_muxed_ipi_message_pass(int cpu, int msg)
        smp_ops->cause_ipi(cpu, info->data);
 }
 
+#ifdef __BIG_ENDIAN__
+#define IPI_MESSAGE(A) (1 << (24 - 8 * (A)))
+#else
+#define IPI_MESSAGE(A) (1 << (8 * (A)))
+#endif
+
 irqreturn_t smp_ipi_demux(void)
 {
        struct cpu_messages *info = &__get_cpu_var(ipi_message);
@@ -241,19 +247,14 @@ irqreturn_t smp_ipi_demux(void)
 
        do {
                all = xchg(&info->messages, 0);
-
-#ifdef __BIG_ENDIAN
-               if (all & (1 << (24 - 8 * PPC_MSG_CALL_FUNCTION)))
+               if (all & IPI_MESSAGE(PPC_MSG_CALL_FUNCTION))
                        generic_smp_call_function_interrupt();
-               if (all & (1 << (24 - 8 * PPC_MSG_RESCHEDULE)))
+               if (all & IPI_MESSAGE(PPC_MSG_RESCHEDULE))
                        scheduler_ipi();
-               if (all & (1 << (24 - 8 * PPC_MSG_CALL_FUNC_SINGLE)))
+               if (all & IPI_MESSAGE(PPC_MSG_CALL_FUNC_SINGLE))
                        generic_smp_call_function_single_interrupt();
-               if (all & (1 << (24 - 8 * PPC_MSG_DEBUGGER_BREAK)))
+               if (all & IPI_MESSAGE(PPC_MSG_DEBUGGER_BREAK))
                        debug_ipi_action(0, NULL);
-#else
-#error Unsupported ENDIAN
-#endif
        } while (info->messages);
 
        return IRQ_HANDLED;