+ this_nmi = percpu_read(irq_stat.__nmi_count);+ if ((handled > 1) ||+ /* the next nmi could be a back-to-back nmi */+ ((__get_cpu_var(nmi).marked == this_nmi) &&+ (__get_cpu_var(nmi).handled > 1))) {+ /*+ * We could have two subsequent back-to-back nmis: The+ * first handles more than one counter, the 2nd+ * handles only one counter and the 3rd handles no+ * counter.+ *+ * This is the 2nd nmi because the previous was+ * handling more than one counter. We will mark the+ * next (3rd) and then drop it if unhandled.+ */+ __get_cpu_var(nmi).marked = this_nmi + 1;+ __get_cpu_var(nmi).handled = handled;+ } return NOTIFY_STOP; }