MIPS: Netlogic: SMP fixes for XLR/XLS platform code.
authorJayachandran C <jayachandranc@netlogicmicro.com>
Mon, 6 Jun 2011 21:44:12 +0000 (03:14 +0530)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 20 Jul 2011 22:12:11 +0000 (23:12 +0100)
Fix few issues in the Netlogic code:
- Use handle_percpu_irq to handle per-cpu interrupts
- Remove unused function nlm_common_ipi_handler()
- Call scheduler_ipi() on SMP_RESCHEDULE_YOURSELF
- Enable interrupts in nlm_smp_finish()

Signed-off-by: Jayachandran C <jayachandranc@netlogicmicro.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/2460/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/netlogic/xlr/irq.c
arch/mips/netlogic/xlr/smp.c

index 1446d58e364cc11d3887cd14236a271b7cb02494..521bb7377eb0d4340d3c6f701c170399280eed86 100644 (file)
@@ -209,7 +209,7 @@ void __init init_xlr_irqs(void)
                        irq_set_chip_and_handler(i, &xlr_pic, handle_level_irq);
                else
                        irq_set_chip_and_handler(i, &nlm_cpu_intr,
-                                               handle_level_irq);
+                                               handle_percpu_irq);
        }
 #ifdef CONFIG_SMP
        irq_set_chip_and_handler(IRQ_IPI_SMP_FUNCTION, &nlm_cpu_intr,
index b495a7f1433b5f74054dd80e7b22f0d8dee7263f..d842bce5c9405a2f267bb7f3de5cfda97f8e835e 100644 (file)
@@ -87,17 +87,7 @@ void nlm_smp_function_ipi_handler(unsigned int irq, struct irq_desc *desc)
 /* IRQ_IPI_SMP_RESCHEDULE  handler */
 void nlm_smp_resched_ipi_handler(unsigned int irq, struct irq_desc *desc)
 {
-       set_need_resched();
-}
-
-void nlm_common_ipi_handler(int irq, struct pt_regs *regs)
-{
-       if (irq == IRQ_IPI_SMP_FUNCTION) {
-               smp_call_function_interrupt();
-       } else {
-               /* Announce that we are for reschduling */
-               set_need_resched();
-       }
+       scheduler_ipi();
 }
 
 /*
@@ -122,6 +112,7 @@ void nlm_smp_finish(void)
 #ifdef notyet
        nlm_common_msgring_cpu_init();
 #endif
+       local_irq_enable();
 }
 
 void nlm_cpus_done(void)