thermal/drivers/sprd: Fix return value of sprd_thm_probe()
[linux-2.6-microblaze.git] / kernel / hung_task.c
index 14a625c..ce76f49 100644 (file)
@@ -53,9 +53,18 @@ int __read_mostly sysctl_hung_task_warnings = 10;
 static int __read_mostly did_panic;
 static bool hung_task_show_lock;
 static bool hung_task_call_panic;
+static bool hung_task_show_all_bt;
 
 static struct task_struct *watchdog_task;
 
+#ifdef CONFIG_SMP
+/*
+ * Should we dump all CPUs backtraces in a hung task event?
+ * Defaults to 0, can be changed via sysctl.
+ */
+unsigned int __read_mostly sysctl_hung_task_all_cpu_backtrace;
+#endif /* CONFIG_SMP */
+
 /*
  * Should we panic (and reboot, if panic_timeout= is set) when a
  * hung task is detected:
@@ -63,16 +72,6 @@ static struct task_struct *watchdog_task;
 unsigned int __read_mostly sysctl_hung_task_panic =
                                CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE;
 
-static int __init hung_task_panic_setup(char *str)
-{
-       int rc = kstrtouint(str, 0, &sysctl_hung_task_panic);
-
-       if (rc)
-               return rc;
-       return 1;
-}
-__setup("hung_task_panic=", hung_task_panic_setup);
-
 static int
 hung_task_panic(struct notifier_block *this, unsigned long event, void *ptr)
 {
@@ -137,6 +136,9 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout)
                        " disables this message.\n");
                sched_show_task(t);
                hung_task_show_lock = true;
+
+               if (sysctl_hung_task_all_cpu_backtrace)
+                       hung_task_show_all_bt = true;
        }
 
        touch_nmi_watchdog();
@@ -201,10 +203,14 @@ static void check_hung_uninterruptible_tasks(unsigned long timeout)
        rcu_read_unlock();
        if (hung_task_show_lock)
                debug_show_all_locks();
-       if (hung_task_call_panic) {
+
+       if (hung_task_show_all_bt) {
+               hung_task_show_all_bt = false;
                trigger_all_cpu_backtrace();
-               panic("hung_task: blocked tasks");
        }
+
+       if (hung_task_call_panic)
+               panic("hung_task: blocked tasks");
 }
 
 static long hung_timeout_jiffies(unsigned long last_checked,