@@ -126,12 +126,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;
}
}
@@ -156,7 +156,7 @@ static void ipi_handler(struct pt_regs *regs __unused)
*/
if (gic_version() == 2)
smp_rmb();
- 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()];
@@ -386,6 +386,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 {
@@ -398,6 +399,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();
}