|
@@ -1617,6 +1617,7 @@ asmlinkage int vprintk_emit(int facility, int level,
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
int this_cpu;
|
|
int this_cpu;
|
|
int printed_len = 0;
|
|
int printed_len = 0;
|
|
|
|
+ int nmi_message_lost;
|
|
bool in_sched = false;
|
|
bool in_sched = false;
|
|
/* cpu currently holding logbuf_lock in this function */
|
|
/* cpu currently holding logbuf_lock in this function */
|
|
static unsigned int logbuf_cpu = UINT_MAX;
|
|
static unsigned int logbuf_cpu = UINT_MAX;
|
|
@@ -1667,6 +1668,15 @@ asmlinkage int vprintk_emit(int facility, int level,
|
|
strlen(recursion_msg));
|
|
strlen(recursion_msg));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ nmi_message_lost = get_nmi_message_lost();
|
|
|
|
+ if (unlikely(nmi_message_lost)) {
|
|
|
|
+ text_len = scnprintf(textbuf, sizeof(textbuf),
|
|
|
|
+ "BAD LUCK: lost %d message(s) from NMI context!",
|
|
|
|
+ nmi_message_lost);
|
|
|
|
+ printed_len += log_store(0, 2, LOG_PREFIX|LOG_NEWLINE, 0,
|
|
|
|
+ NULL, 0, textbuf, text_len);
|
|
|
|
+ }
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* The printf needs to come first; we need the syslog
|
|
* The printf needs to come first; we need the syslog
|
|
* prefix which might be passed-in as a parameter.
|
|
* prefix which might be passed-in as a parameter.
|