mfd: omap-usb-host: Actually update hostconfig
[firefly-linux-kernel-4.4.55.git] / kernel / panic.c
index e1b2822fff97b8164ffae96e8a17ace02060a0c1..7c57cc9eee2c3155c707281832cbbf9d15b0dfd4 100644 (file)
@@ -259,26 +259,19 @@ unsigned long get_taint(void)
        return tainted_mask;
 }
 
-void add_taint(unsigned flag)
+/**
+ * add_taint: add a taint flag if not already set.
+ * @flag: one of the TAINT_* constants.
+ * @lockdep_ok: whether lock debugging is still OK.
+ *
+ * If something bad has gone wrong, you'll want @lockdebug_ok = false, but for
+ * some notewortht-but-not-corrupting cases, it can be set to true.
+ */
+void add_taint(unsigned flag, enum lockdep_ok lockdep_ok)
 {
-       /*
-        * Can't trust the integrity of the kernel anymore.
-        * We don't call directly debug_locks_off() because the issue
-        * is not necessarily serious enough to set oops_in_progress to 1
-        * Also we want to keep up lockdep for staging/out-of-tree
-        * development and post-warning case.
-        */
-       switch (flag) {
-       case TAINT_CRAP:
-       case TAINT_OOT_MODULE:
-       case TAINT_WARN:
-       case TAINT_FIRMWARE_WORKAROUND:
-               break;
-
-       default:
-               if (__debug_locks_off())
-                       printk(KERN_WARNING "Disabling lock debugging due to kernel taint\n");
-       }
+       if (lockdep_ok == LOCKDEP_NOW_UNRELIABLE && __debug_locks_off())
+               printk(KERN_WARNING
+                      "Disabling lock debugging due to kernel taint\n");
 
        set_bit(flag, &tainted_mask);
 }
@@ -421,7 +414,8 @@ static void warn_slowpath_common(const char *file, int line, void *caller,
        print_modules();
        dump_stack();
        print_oops_end_marker();
-       add_taint(taint);
+       /* Just a warning, don't kill lockdep. */
+       add_taint(taint, LOCKDEP_STILL_OK);
 }
 
 void warn_slowpath_fmt(const char *file, int line, const char *fmt, ...)