|
@@ -155,6 +155,12 @@ int arch_show_interrupts(struct seq_file *p, int prec)
|
|
seq_printf(p, "%10u ", irq_stats(j)->kvm_posted_intr_ipis);
|
|
seq_printf(p, "%10u ", irq_stats(j)->kvm_posted_intr_ipis);
|
|
seq_puts(p, " Posted-interrupt notification event\n");
|
|
seq_puts(p, " Posted-interrupt notification event\n");
|
|
|
|
|
|
|
|
+ seq_printf(p, "%*s: ", prec, "NPI");
|
|
|
|
+ for_each_online_cpu(j)
|
|
|
|
+ seq_printf(p, "%10u ",
|
|
|
|
+ irq_stats(j)->kvm_posted_intr_nested_ipis);
|
|
|
|
+ seq_puts(p, " Nested posted-interrupt event\n");
|
|
|
|
+
|
|
seq_printf(p, "%*s: ", prec, "PIW");
|
|
seq_printf(p, "%*s: ", prec, "PIW");
|
|
for_each_online_cpu(j)
|
|
for_each_online_cpu(j)
|
|
seq_printf(p, "%10u ",
|
|
seq_printf(p, "%10u ",
|
|
@@ -313,6 +319,19 @@ __visible void smp_kvm_posted_intr_wakeup_ipi(struct pt_regs *regs)
|
|
exiting_irq();
|
|
exiting_irq();
|
|
set_irq_regs(old_regs);
|
|
set_irq_regs(old_regs);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Handler for POSTED_INTERRUPT_NESTED_VECTOR.
|
|
|
|
+ */
|
|
|
|
+__visible void smp_kvm_posted_intr_nested_ipi(struct pt_regs *regs)
|
|
|
|
+{
|
|
|
|
+ struct pt_regs *old_regs = set_irq_regs(regs);
|
|
|
|
+
|
|
|
|
+ entering_ack_irq();
|
|
|
|
+ inc_irq_stat(kvm_posted_intr_nested_ipis);
|
|
|
|
+ exiting_irq();
|
|
|
|
+ set_irq_regs(old_regs);
|
|
|
|
+}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
__visible void __irq_entry smp_trace_x86_platform_ipi(struct pt_regs *regs)
|
|
__visible void __irq_entry smp_trace_x86_platform_ipi(struct pt_regs *regs)
|