Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 269037
b: refs/heads/master
c: efc3aac
h: refs/heads/master
i:
  269035: a28449e
v: v3
  • Loading branch information
Don Zickus authored and Ingo Molnar committed Oct 10, 2011
1 parent d71d809 commit 0f45241
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b227e23399dc59977aa42c49bd668bdab7a61812
refs/heads/master: efc3aac5f3d7dbd47fd0a4983979dd4342a78fba
20 changes: 18 additions & 2 deletions trunk/arch/x86/kernel/nmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,15 @@ static struct nmi_desc nmi_desc[NMI_MAX] =

};

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;
Expand Down Expand Up @@ -262,8 +271,13 @@ unknown_nmi_error(unsigned char reason, struct pt_regs *regs)
* 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
Expand Down Expand Up @@ -314,6 +328,7 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
__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
Expand Down Expand Up @@ -344,6 +359,7 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
*/
reassert_nmi();
#endif
__this_cpu_add(nmi_stats.external, 1);
raw_spin_unlock(&nmi_reason_lock);
return;
}
Expand Down Expand Up @@ -380,7 +396,7 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
* for now.
*/
if (b2b && __this_cpu_read(swallow_nmi))
;
__this_cpu_add(nmi_stats.swallow, 1);
else
unknown_nmi_error(reason, regs);
}
Expand Down

0 comments on commit 0f45241

Please sign in to comment.