aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree.c
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-08-20 21:29:32 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-09-29 00:38:48 -0400
commite90c53d3e238dd0b7b02964370e8fece1778df96 (patch)
tree23e5b8623c2c37bd8a4656c66266209872f80701 /kernel/rcutree.c
parent5b61b0baa9e80289c53413e573befc5790a04ac7 (diff)
rcu: Remove rcu_needs_cpu_flush() to avoid false quiescent states
The purpose of rcu_needs_cpu_flush() was to iterate on pushing the current grace period in order to help the current CPU enter dyntick-idle mode. However, this can result in failures if the CPU starts entering dyntick-idle mode, but then backs out. In this case, the call to rcu_pending() from rcu_needs_cpu_flush() might end up announcing a non-existing quiescent state. This commit therefore removes rcu_needs_cpu_flush() in favor of letting the dyntick-idle machinery at the end of the softirq handler push the loop along via its call to rcu_pending(). Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcutree.c')
-rw-r--r--kernel/rcutree.c3
1 files changed, 0 insertions, 3 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index 8455043c9250..e75df0c93abd 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -1528,9 +1528,6 @@ static void rcu_process_callbacks(struct softirq_action *unused)
1528 &__get_cpu_var(rcu_sched_data)); 1528 &__get_cpu_var(rcu_sched_data));
1529 __rcu_process_callbacks(&rcu_bh_state, &__get_cpu_var(rcu_bh_data)); 1529 __rcu_process_callbacks(&rcu_bh_state, &__get_cpu_var(rcu_bh_data));
1530 rcu_preempt_process_callbacks(); 1530 rcu_preempt_process_callbacks();
1531
1532 /* If we are last CPU on way to dyntick-idle mode, accelerate it. */
1533 rcu_needs_cpu_flush();
1534 trace_rcu_utilization("End RCU core"); 1531 trace_rcu_utilization("End RCU core");
1535} 1532}
1536 1533