pinctrl: at91-pio4: add missing of_node_put
[linux-2.6-block.git] / kernel / panic.c
index 9d833d913c84d66a6e41ca5dc7ad3307e4b65ea9..42e48748855420af5fa2a0d45f04e54298546b9e 100644 (file)
@@ -34,7 +34,8 @@
 #define PANIC_BLINK_SPD 18
 
 int panic_on_oops = CONFIG_PANIC_ON_OOPS_VALUE;
-static unsigned long tainted_mask;
+static unsigned long tainted_mask =
+       IS_ENABLED(CONFIG_GCC_PLUGIN_RANDSTRUCT) ? (1 << TAINT_RANDSTRUCT) : 0;
 static int pause_on_oops;
 static int pause_on_oops_flag;
 static DEFINE_SPINLOCK(pause_on_oops_lock);
@@ -308,52 +309,40 @@ EXPORT_SYMBOL(panic);
  * is being removed anyway.
  */
 const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = {
-       { 'P', 'G', true },     /* TAINT_PROPRIETARY_MODULE */
-       { 'F', ' ', true },     /* TAINT_FORCED_MODULE */
-       { 'S', ' ', false },    /* TAINT_CPU_OUT_OF_SPEC */
-       { 'R', ' ', false },    /* TAINT_FORCED_RMMOD */
-       { 'M', ' ', false },    /* TAINT_MACHINE_CHECK */
-       { 'B', ' ', false },    /* TAINT_BAD_PAGE */
-       { 'U', ' ', false },    /* TAINT_USER */
-       { 'D', ' ', false },    /* TAINT_DIE */
-       { 'A', ' ', false },    /* TAINT_OVERRIDDEN_ACPI_TABLE */
-       { 'W', ' ', false },    /* TAINT_WARN */
-       { 'C', ' ', true },     /* TAINT_CRAP */
-       { 'I', ' ', false },    /* TAINT_FIRMWARE_WORKAROUND */
-       { 'O', ' ', true },     /* TAINT_OOT_MODULE */
-       { 'E', ' ', true },     /* TAINT_UNSIGNED_MODULE */
-       { 'L', ' ', false },    /* TAINT_SOFTLOCKUP */
-       { 'K', ' ', true },     /* TAINT_LIVEPATCH */
-       { 'X', ' ', true },     /* TAINT_AUX */
+       [ TAINT_PROPRIETARY_MODULE ]    = { 'P', 'G', true },
+       [ TAINT_FORCED_MODULE ]         = { 'F', ' ', true },
+       [ TAINT_CPU_OUT_OF_SPEC ]       = { 'S', ' ', false },
+       [ TAINT_FORCED_RMMOD ]          = { 'R', ' ', false },
+       [ TAINT_MACHINE_CHECK ]         = { 'M', ' ', false },
+       [ TAINT_BAD_PAGE ]              = { 'B', ' ', false },
+       [ TAINT_USER ]                  = { 'U', ' ', false },
+       [ TAINT_DIE ]                   = { 'D', ' ', false },
+       [ TAINT_OVERRIDDEN_ACPI_TABLE ] = { 'A', ' ', false },
+       [ TAINT_WARN ]                  = { 'W', ' ', false },
+       [ TAINT_CRAP ]                  = { 'C', ' ', true },
+       [ TAINT_FIRMWARE_WORKAROUND ]   = { 'I', ' ', false },
+       [ TAINT_OOT_MODULE ]            = { 'O', ' ', true },
+       [ TAINT_UNSIGNED_MODULE ]       = { 'E', ' ', true },
+       [ TAINT_SOFTLOCKUP ]            = { 'L', ' ', false },
+       [ TAINT_LIVEPATCH ]             = { 'K', ' ', true },
+       [ TAINT_AUX ]                   = { 'X', ' ', true },
+       [ TAINT_RANDSTRUCT ]            = { 'T', ' ', true },
 };
 
 /**
- *     print_tainted - return a string to represent the kernel taint state.
+ * print_tainted - return a string to represent the kernel taint state.
  *
- *  'P' - Proprietary module has been loaded.
- *  'F' - Module has been forcibly loaded.
- *  'S' - SMP with CPUs not designed for SMP.
- *  'R' - User forced a module unload.
- *  'M' - System experienced a machine check exception.
- *  'B' - System has hit bad_page.
- *  'U' - Userspace-defined naughtiness.
- *  'D' - Kernel has oopsed before
- *  'A' - ACPI table overridden.
- *  'W' - Taint on warning.
- *  'C' - modules from drivers/staging are loaded.
- *  'I' - Working around severe firmware bug.
- *  'O' - Out-of-tree module has been loaded.
- *  'E' - Unsigned module has been loaded.
- *  'L' - A soft lockup has previously occurred.
- *  'K' - Kernel has been live patched.
- *  'X' - Auxiliary taint, for distros' use.
+ * For individual taint flag meanings, see Documentation/sysctl/kernel.txt
  *
- *     The string is overwritten by the next call to print_tainted().
+ * The string is overwritten by the next call to print_tainted(),
+ * but is always NULL terminated.
  */
 const char *print_tainted(void)
 {
        static char buf[TAINT_FLAGS_COUNT + sizeof("Tainted: ")];
 
+       BUILD_BUG_ON(ARRAY_SIZE(taint_flags) != TAINT_FLAGS_COUNT);
+
        if (tainted_mask) {
                char *s;
                int i;
@@ -554,6 +543,8 @@ void __warn(const char *file, int line, void *caller, unsigned taint,
        else
                dump_stack();
 
+       print_irqtrace_events(current);
+
        print_oops_end_marker();
 
        /* Just a warning, don't kill lockdep. */