};
+struct nmi_stats {
+ unsigned int normal;
+ unsigned int unknown;
+ unsigned int external;
+ unsigned int swallow;
+};
+
+static DEFINE_PER_CPU(struct nmi_stats, nmi_stats);
+
static int ignore_nmis;
int unknown_nmi_panic;
* if it caused the NMI)
*/
handled = nmi_handle(NMI_UNKNOWN, regs, false);
- if (handled)
+ if (handled) {
+ __this_cpu_add(nmi_stats.unknown, handled);
return;
+ }
+
+ __this_cpu_add(nmi_stats.unknown, 1);
+
#ifdef CONFIG_MCA
/*
* Might actually be able to figure out what the guilty party
__this_cpu_write(last_nmi_rip, regs->ip);
handled = nmi_handle(NMI_LOCAL, regs, b2b);
+ __this_cpu_add(nmi_stats.normal, handled);
if (handled) {
/*
* There are cases when a NMI handler handles multiple
*/
reassert_nmi();
#endif
+ __this_cpu_add(nmi_stats.external, 1);
raw_spin_unlock(&nmi_reason_lock);
return;
}
* for now.
*/
if (b2b && __this_cpu_read(swallow_nmi))
- ;
+ __this_cpu_add(nmi_stats.swallow, 1);
else
unknown_nmi_error(reason, regs);
}