Code Review
/
kvmfornfv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Upgrade to 4.4.50-rt62
[kvmfornfv.git]
/
kernel
/
arch
/
x86
/
kernel
/
nmi.c
diff --git
a/kernel/arch/x86/kernel/nmi.c
b/kernel/arch/x86/kernel/nmi.c
index
d05bd2e
..
424aec4
100644
(file)
--- a/
kernel/arch/x86/kernel/nmi.c
+++ b/
kernel/arch/x86/kernel/nmi.c
@@
-110,7
+110,7
@@
static void nmi_max_handler(struct irq_work *w)
a->handler, whole_msecs, decimal_msecs);
}
a->handler, whole_msecs, decimal_msecs);
}
-static int nmi_handle(unsigned int type, struct pt_regs *regs
, bool b2b
)
+static int nmi_handle(unsigned int type, struct pt_regs *regs)
{
struct nmi_desc *desc = nmi_to_desc(type);
struct nmiaction *a;
{
struct nmi_desc *desc = nmi_to_desc(type);
struct nmiaction *a;
@@
-213,7
+213,7
@@
static void
pci_serr_error(unsigned char reason, struct pt_regs *regs)
{
/* check to see if anyone registered against these types of errors */
pci_serr_error(unsigned char reason, struct pt_regs *regs)
{
/* check to see if anyone registered against these types of errors */
- if (nmi_handle(NMI_SERR, regs
, false
))
+ if (nmi_handle(NMI_SERR, regs))
return;
pr_emerg("NMI: PCI system error (SERR) for reason %02x on CPU %d.\n",
return;
pr_emerg("NMI: PCI system error (SERR) for reason %02x on CPU %d.\n",
@@
-231,7
+231,7
@@
pci_serr_error(unsigned char reason, struct pt_regs *regs)
#endif
if (panic_on_unrecovered_nmi)
#endif
if (panic_on_unrecovered_nmi)
-
panic(
"NMI: Not continuing");
+
nmi_panic(regs,
"NMI: Not continuing");
pr_emerg("Dazed and confused, but trying to continue\n");
pr_emerg("Dazed and confused, but trying to continue\n");
@@
-247,7
+247,7
@@
io_check_error(unsigned char reason, struct pt_regs *regs)
unsigned long i;
/* check to see if anyone registered against these types of errors */
unsigned long i;
/* check to see if anyone registered against these types of errors */
- if (nmi_handle(NMI_IO_CHECK, regs
, false
))
+ if (nmi_handle(NMI_IO_CHECK, regs))
return;
pr_emerg(
return;
pr_emerg(
@@
-255,8
+255,16
@@
io_check_error(unsigned char reason, struct pt_regs *regs)
reason, smp_processor_id());
show_regs(regs);
reason, smp_processor_id());
show_regs(regs);
- if (panic_on_io_nmi)
- panic("NMI IOCK error: Not continuing");
+ if (panic_on_io_nmi) {
+ nmi_panic(regs, "NMI IOCK error: Not continuing");
+
+ /*
+ * If we end up here, it means we have received an NMI while
+ * processing panic(). Simply return without delaying and
+ * re-enabling NMIs.
+ */
+ return;
+ }
/* Re-enable the IOCK line, wait for a few seconds */
reason = (reason & NMI_REASON_CLEAR_MASK) | NMI_REASON_CLEAR_IOCHK;
/* Re-enable the IOCK line, wait for a few seconds */
reason = (reason & NMI_REASON_CLEAR_MASK) | NMI_REASON_CLEAR_IOCHK;
@@
-284,7
+292,7
@@
unknown_nmi_error(unsigned char reason, struct pt_regs *regs)
* as only the first one is ever run (unless it can actually determine
* if it caused the NMI)
*/
* as only the first one is ever run (unless it can actually determine
* if it caused the NMI)
*/
- handled = nmi_handle(NMI_UNKNOWN, regs
, false
);
+ handled = nmi_handle(NMI_UNKNOWN, regs);
if (handled) {
__this_cpu_add(nmi_stats.unknown, handled);
return;
if (handled) {
__this_cpu_add(nmi_stats.unknown, handled);
return;
@@
-297,7
+305,7
@@
unknown_nmi_error(unsigned char reason, struct pt_regs *regs)
pr_emerg("Do you have a strange power saving mode enabled?\n");
if (unknown_nmi_panic || panic_on_unrecovered_nmi)
pr_emerg("Do you have a strange power saving mode enabled?\n");
if (unknown_nmi_panic || panic_on_unrecovered_nmi)
-
panic(
"NMI: Not continuing");
+
nmi_panic(regs,
"NMI: Not continuing");
pr_emerg("Dazed and confused, but trying to continue\n");
}
pr_emerg("Dazed and confused, but trying to continue\n");
}
@@
-332,7
+340,7
@@
static void default_do_nmi(struct pt_regs *regs)
__this_cpu_write(last_nmi_rip, regs->ip);
__this_cpu_write(last_nmi_rip, regs->ip);
- handled = nmi_handle(NMI_LOCAL, regs
, b2b
);
+ handled = nmi_handle(NMI_LOCAL, regs);
__this_cpu_add(nmi_stats.normal, handled);
if (handled) {
/*
__this_cpu_add(nmi_stats.normal, handled);
if (handled) {
/*