aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree.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/rcutree.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/rcutree.c')
-rw-r--r--kernel/rcutree.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index 06e40dd53b23..9888a0ad2d4e 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -356,10 +356,14 @@ static void rcu_idle_enter_common(struct rcu_dynticks *rdtp, long long oldval)
356 } 356 }
357 trace_rcu_dyntick("Start", oldval, rdtp->dynticks_nesting); 357 trace_rcu_dyntick("Start", oldval, rdtp->dynticks_nesting);
358 if (!idle_cpu(smp_processor_id())) { 358 if (!idle_cpu(smp_processor_id())) {
359 WARN_ON_ONCE(1); /* must be idle task! */ 359 struct task_struct *idle = idle_task(smp_processor_id());
360
360 trace_rcu_dyntick("Error on entry: not idle task", 361 trace_rcu_dyntick("Error on entry: not idle task",
361 oldval, rdtp->dynticks_nesting); 362 oldval, rdtp->dynticks_nesting);
362 ftrace_dump(DUMP_ALL); 363 ftrace_dump(DUMP_ALL);
364 WARN_ONCE(1, "Current pid: %d comm: %s / Idle pid: %d comm: %s",
365 current->pid, current->comm,
366 idle->pid, idle->comm); /* must be idle task! */
363 } 367 }
364 /* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */ 368 /* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */
365 smp_mb__before_atomic_inc(); /* See above. */ 369 smp_mb__before_atomic_inc(); /* See above. */
@@ -445,10 +449,14 @@ static void rcu_idle_exit_common(struct rcu_dynticks *rdtp, long long oldval)
445 WARN_ON_ONCE(!(atomic_read(&rdtp->dynticks) & 0x1)); 449 WARN_ON_ONCE(!(atomic_read(&rdtp->dynticks) & 0x1));
446 trace_rcu_dyntick("End", oldval, rdtp->dynticks_nesting); 450 trace_rcu_dyntick("End", oldval, rdtp->dynticks_nesting);
447 if (!idle_cpu(smp_processor_id())) { 451 if (!idle_cpu(smp_processor_id())) {
448 WARN_ON_ONCE(1); /* must be idle task! */ 452 struct task_struct *idle = idle_task(smp_processor_id());
453
449 trace_rcu_dyntick("Error on exit: not idle task", 454 trace_rcu_dyntick("Error on exit: not idle task",
450 oldval, rdtp->dynticks_nesting); 455 oldval, rdtp->dynticks_nesting);
451 ftrace_dump(DUMP_ALL); 456 ftrace_dump(DUMP_ALL);
457 WARN_ONCE(1, "Current pid: %d comm: %s / Idle pid: %d comm: %s",
458 current->pid, current->comm,
459 idle->pid, idle->comm); /* must be idle task! */
452 } 460 }
453} 461}
454 462