Commit 69361eef authored by Josh Hunt's avatar Josh Hunt Committed by Linus Torvalds

panic: add TAINT_SOFTLOCKUP

This taint flag will be set if the system has ever entered a softlockup
state.  Similar to TAINT_WARN it is useful to know whether or not the
system has been in a softlockup state when debugging.

[akpm@linux-foundation.org: apply the taint before calling panic()]
Signed-off-by: default avatarJosh Hunt <johunt@akamai.com>
Cc: Jason Baron <jbaron@akamai.com>
Cc: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 1da85fdf
...@@ -268,6 +268,8 @@ characters, each representing a particular tainted value. ...@@ -268,6 +268,8 @@ characters, each representing a particular tainted value.
14: 'E' if an unsigned module has been loaded in a kernel supporting 14: 'E' if an unsigned module has been loaded in a kernel supporting
module signature. module signature.
15: 'L' if a soft lockup has previously occurred on the system.
The primary reason for the 'Tainted: ' string is to tell kernel The primary reason for the 'Tainted: ' string is to tell kernel
debuggers if this is a clean kernel or if anything unusual has debuggers if this is a clean kernel or if anything unusual has
occurred. Tainting is permanent: even if an offending module is occurred. Tainting is permanent: even if an offending module is
......
...@@ -826,6 +826,7 @@ can be ORed together: ...@@ -826,6 +826,7 @@ can be ORed together:
4096 - An out-of-tree module has been loaded. 4096 - An out-of-tree module has been loaded.
8192 - An unsigned module has been loaded in a kernel supporting module 8192 - An unsigned module has been loaded in a kernel supporting module
signature. signature.
16384 - A soft lockup has previously occurred on the system.
============================================================== ==============================================================
......
...@@ -470,6 +470,7 @@ extern enum system_states { ...@@ -470,6 +470,7 @@ extern enum system_states {
#define TAINT_FIRMWARE_WORKAROUND 11 #define TAINT_FIRMWARE_WORKAROUND 11
#define TAINT_OOT_MODULE 12 #define TAINT_OOT_MODULE 12
#define TAINT_UNSIGNED_MODULE 13 #define TAINT_UNSIGNED_MODULE 13
#define TAINT_SOFTLOCKUP 14
extern const char hex_asc[]; extern const char hex_asc[];
#define hex_asc_lo(x) hex_asc[((x) & 0x0f)] #define hex_asc_lo(x) hex_asc[((x) & 0x0f)]
......
...@@ -224,6 +224,7 @@ static const struct tnt tnts[] = { ...@@ -224,6 +224,7 @@ static const struct tnt tnts[] = {
{ TAINT_FIRMWARE_WORKAROUND, 'I', ' ' }, { TAINT_FIRMWARE_WORKAROUND, 'I', ' ' },
{ TAINT_OOT_MODULE, 'O', ' ' }, { TAINT_OOT_MODULE, 'O', ' ' },
{ TAINT_UNSIGNED_MODULE, 'E', ' ' }, { TAINT_UNSIGNED_MODULE, 'E', ' ' },
{ TAINT_SOFTLOCKUP, 'L', ' ' },
}; };
/** /**
......
...@@ -368,6 +368,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer) ...@@ -368,6 +368,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
smp_mb__after_atomic(); smp_mb__after_atomic();
} }
add_taint(TAINT_SOFTLOCKUP, LOCKDEP_STILL_OK);
if (softlockup_panic) if (softlockup_panic)
panic("softlockup: hung tasks"); panic("softlockup: hung tasks");
__this_cpu_write(soft_watchdog_warn, true); __this_cpu_write(soft_watchdog_warn, true);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment