aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutiny.c
diff options
context:
space:
mode:
authorPaul E. McKenney <paul.mckenney@linaro.org>2011-11-01 11:57:21 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-12-11 13:31:42 -0500
commit0989cb46783188ea7346ba6490be0046b9b7a725 (patch)
treeab3ca7e6099efd9ca814e9202a679388f36ecc90 /kernel/rcutiny.c
parent4145fa7fbee3ec1e61c52825b146192885d9759f (diff)
rcu: Add more information to the wrong-idle-task complaint
The current code just complains if the current task is not the idle task. This commit therefore adds printing of the identity of the idle task. Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Diffstat (limited to 'kernel/rcutiny.c')
-rw-r--r--kernel/rcutiny.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/kernel/rcutiny.c b/kernel/rcutiny.c
index 9b9bdf666fb5..6d70ff71a875 100644
--- a/kernel/rcutiny.c
+++ b/kernel/rcutiny.c
@@ -65,10 +65,14 @@ static void rcu_idle_enter_common(long long oldval)
65 } 65 }
66 RCU_TRACE(trace_rcu_dyntick("Start", oldval, rcu_dynticks_nesting)); 66 RCU_TRACE(trace_rcu_dyntick("Start", oldval, rcu_dynticks_nesting));
67 if (!idle_cpu(smp_processor_id())) { 67 if (!idle_cpu(smp_processor_id())) {
68 WARN_ON_ONCE(1); /* must be idle task! */ 68 struct task_struct *idle = idle_task(smp_processor_id());
69
69 RCU_TRACE(trace_rcu_dyntick("Error on entry: not idle task", 70 RCU_TRACE(trace_rcu_dyntick("Error on entry: not idle task",
70 oldval, rcu_dynticks_nesting)); 71 oldval, rcu_dynticks_nesting));
71 ftrace_dump(DUMP_ALL); 72 ftrace_dump(DUMP_ALL);
73 WARN_ONCE(1, "Current pid: %d comm: %s / Idle pid: %d comm: %s",
74 current->pid, current->comm,
75 idle->pid, idle->comm); /* must be idle task! */
72 } 76 }
73 rcu_sched_qs(0); /* implies rcu_bh_qsctr_inc(0) */ 77 rcu_sched_qs(0); /* implies rcu_bh_qsctr_inc(0) */
74} 78}
@@ -115,10 +119,14 @@ static void rcu_idle_exit_common(long long oldval)
115 } 119 }
116 RCU_TRACE(trace_rcu_dyntick("End", oldval, rcu_dynticks_nesting)); 120 RCU_TRACE(trace_rcu_dyntick("End", oldval, rcu_dynticks_nesting));
117 if (!idle_cpu(smp_processor_id())) { 121 if (!idle_cpu(smp_processor_id())) {
118 WARN_ON_ONCE(1); /* must be idle task! */ 122 struct task_struct *idle = idle_task(smp_processor_id());
123
119 RCU_TRACE(trace_rcu_dyntick("Error on exit: not idle task", 124 RCU_TRACE(trace_rcu_dyntick("Error on exit: not idle task",
120 oldval, rcu_dynticks_nesting)); 125 oldval, rcu_dynticks_nesting));
121 ftrace_dump(DUMP_ALL); 126 ftrace_dump(DUMP_ALL);
127 WARN_ONCE(1, "Current pid: %d comm: %s / Idle pid: %d comm: %s",
128 current->pid, current->comm,
129 idle->pid, idle->comm); /* must be idle task! */
122 } 130 }
123} 131}
124 132