@@ -125,12 +125,12 @@ static void check_spurious(void)
}
}
-static void check_ipi_sender(u32 irqstat)
+static void check_ipi_sender(u32 irqstat, int sender)
{
if (gic_version() == 2) {
int src = (irqstat >> 10) & 7;
- if (src != IPI_SENDER)
+ if (src != sender)
bad_sender[smp_processor_id()] = src;
}
}
@@ -148,7 +148,7 @@ static void ipi_handler(struct pt_regs *regs __unused)
if (irqnr != GICC_INT_SPURIOUS) {
gic_write_eoir(irqstat);
- check_ipi_sender(irqstat);
+ check_ipi_sender(irqstat, IPI_SENDER);
check_irqnr(irqnr);
smp_wmb(); /* pairs with smp_rmb in check_acked */
++acked[smp_processor_id()];
@@ -382,6 +382,7 @@ static void ipi_clear_active_handler(struct pt_regs *regs __unused)
writel(val, base + GICD_ICACTIVER);
+ check_ipi_sender(irqstat, smp_processor_id());
check_irqnr(irqnr);
++acked[smp_processor_id()];
} else {
@@ -394,6 +395,7 @@ static void run_active_clear_test(void)
report_prefix_push("active");
setup_irq(ipi_clear_active_handler);
ipi_test_self();
+ check_spurious();
report_prefix_pop();
}