|
@@ -130,10 +130,12 @@ static irqreturn_t smp_call_function_interrupt(int irq, void *dev_id);
|
|
|
|
|
|
static struct irqaction reschedule_ipi = {
|
|
|
.handler = smp_reschedule_interrupt,
|
|
|
+ .flags = IRQF_NOBALANCING,
|
|
|
.name = "smp reschedule IPI"
|
|
|
};
|
|
|
static struct irqaction call_function_ipi = {
|
|
|
.handler = smp_call_function_interrupt,
|
|
|
+ .flags = IRQF_NOBALANCING,
|
|
|
.name = "smp call function IPI"
|
|
|
};
|
|
|
|
|
@@ -141,7 +143,7 @@ static struct irqaction call_function_ipi = {
|
|
|
static irqreturn_t smp_ipi_timer_interrupt(int irq, void *dev_id);
|
|
|
static struct irqaction local_timer_ipi = {
|
|
|
.handler = smp_ipi_timer_interrupt,
|
|
|
- .flags = IRQF_DISABLED,
|
|
|
+ .flags = IRQF_DISABLED | IRQF_NOBALANCING,
|
|
|
.name = "smp local timer IPI"
|
|
|
};
|
|
|
#endif
|
|
@@ -180,6 +182,7 @@ static void init_ipi(void)
|
|
|
|
|
|
#ifdef CONFIG_MN10300_CACHE_ENABLED
|
|
|
/* set up the cache flush IPI */
|
|
|
+ irq_set_chip(FLUSH_CACHE_IPI, &mn10300_ipi_type);
|
|
|
flags = arch_local_cli_save();
|
|
|
__set_intr_stub(NUM2EXCEP_IRQ_LEVEL(FLUSH_CACHE_GxICR_LV),
|
|
|
mn10300_low_ipi_handler);
|
|
@@ -189,6 +192,7 @@ static void init_ipi(void)
|
|
|
#endif
|
|
|
|
|
|
/* set up the NMI call function IPI */
|
|
|
+ irq_set_chip(CALL_FUNCTION_NMI_IPI, &mn10300_ipi_type);
|
|
|
flags = arch_local_cli_save();
|
|
|
GxICR(CALL_FUNCTION_NMI_IPI) = GxICR_NMI | GxICR_ENABLE | GxICR_DETECT;
|
|
|
tmp16 = GxICR(CALL_FUNCTION_NMI_IPI);
|
|
@@ -199,6 +203,10 @@ static void init_ipi(void)
|
|
|
__set_intr_stub(NUM2EXCEP_IRQ_LEVEL(SMP_BOOT_GxICR_LV),
|
|
|
mn10300_low_ipi_handler);
|
|
|
arch_local_irq_restore(flags);
|
|
|
+
|
|
|
+#ifdef CONFIG_KERNEL_DEBUGGER
|
|
|
+ irq_set_chip(DEBUGGER_NMI_IPI, &mn10300_ipi_type);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
/**
|