Because tasks don't nest, the ->dyntick_nesting must always be zero upon entry to rcu_idle_enter_common(). Therefore, pass "0" rather than the counter itself.
Showing the changes to kernel/rcutree.c (1 of 1 file). Show all
Unified · Split
| @@ -350,12 +350,11 @@ static int rcu_implicit_offline_qs(struct rcu_data *rdp) · 349 unmodified lines | |||
| 350 | */ | 350 | */ |
| 351 | static void rcu_idle_enter_common(struct rcu_dynticks *rdtp, long long oldval) | 351 | static void rcu_idle_enter_common(struct rcu_dynticks *rdtp, long long oldval) |
| 352 | { | 352 | { |
| 353 | trace_rcu_dyntick("Start", oldval, rdtp->dynticks_nesting); | 353 | trace_rcu_dyntick("Start", oldval, 0); |
| 354 | if (!is_idle_task(current)) { | 354 | if (!is_idle_task(current)) { |
| 355 | struct task_struct *idle = idle_task(smp_processor_id()); | 355 | struct task_struct *idle = idle_task(smp_processor_id()); |
| 356 | 356 | ||
| 357 | trace_rcu_dyntick("Error on entry: not idle task", | 357 | trace_rcu_dyntick("Error on entry: not idle task", oldval, 0); |
| 358 | oldval, rdtp->dynticks_nesting); | ||
| 359 | ftrace_dump(DUMP_ALL); | 358 | ftrace_dump(DUMP_ALL); |
| 360 | WARN_ONCE(1, "Current pid: %d comm: %s / Idle pid: %d comm: %s", | 359 | WARN_ONCE(1, "Current pid: %d comm: %s / Idle pid: %d comm: %s", |
| 361 | current->pid, current->comm, | 360 | current->pid, current->comm, |