diff options
author | Josh Boyer <jwboyer@redhat.com> | 2011-08-22 11:03:52 -0400 |
---|---|---|
committer | Josh Boyer <jwboyer@redhat.com> | 2011-09-12 07:31:24 -0400 |
commit | 27b62b6f8575354a5ed22c9bee9fe0f9bba8f07f (patch) | |
tree | db0f770806e2fce427a1f906b6572031f65ae67b /rcutree-avoid-false-quiescent-states.patch | |
parent | 737c9c7da818f1da0bdf3f6a0dda5c38a3cba769 (diff) | |
download | kernel-27b62b6f8575354a5ed22c9bee9fe0f9bba8f07f.tar.gz kernel-27b62b6f8575354a5ed22c9bee9fe0f9bba8f07f.tar.xz kernel-27b62b6f8575354a5ed22c9bee9fe0f9bba8f07f.zip |
Avoid false quiescent states in rcutree with CONFIG_RCU_FAST_NO_HZ. (rhbz 577968)
Diffstat (limited to 'rcutree-avoid-false-quiescent-states.patch')
-rw-r--r-- | rcutree-avoid-false-quiescent-states.patch | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/rcutree-avoid-false-quiescent-states.patch b/rcutree-avoid-false-quiescent-states.patch new file mode 100644 index 000000000..9c7ffea34 --- /dev/null +++ b/rcutree-avoid-false-quiescent-states.patch @@ -0,0 +1,67 @@ +diff --git a/kernel/rcutree.c b/kernel/rcutree.c +index ba06207..c38a882 100644 +--- a/kernel/rcutree.c ++++ b/kernel/rcutree.c +@@ -1476,9 +1476,6 @@ static void rcu_process_callbacks(struct softirq_action *unused) + &__get_cpu_var(rcu_sched_data)); + __rcu_process_callbacks(&rcu_bh_state, &__get_cpu_var(rcu_bh_data)); + rcu_preempt_process_callbacks(); +- +- /* If we are last CPU on way to dyntick-idle mode, accelerate it. */ +- rcu_needs_cpu_flush(); + } + + /* +diff --git a/kernel/rcutree.h b/kernel/rcutree.h +index 01b2ccd..795f7fc 100644 +--- a/kernel/rcutree.h ++++ b/kernel/rcutree.h +@@ -450,7 +450,6 @@ static int rcu_preempt_needs_cpu(int cpu); + static void __cpuinit rcu_preempt_init_percpu_data(int cpu); + static void rcu_preempt_send_cbs_to_online(void); + static void __init __rcu_init_preempt(void); +-static void rcu_needs_cpu_flush(void); + static void rcu_initiate_boost(struct rcu_node *rnp, unsigned long flags); + static void rcu_preempt_boost_start_gp(struct rcu_node *rnp); + static void invoke_rcu_callbacks_kthread(void); +diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h +index 8aafbb8..b0254de 100644 +--- a/kernel/rcutree_plugin.h ++++ b/kernel/rcutree_plugin.h +@@ -1907,15 +1907,6 @@ int rcu_needs_cpu(int cpu) + return rcu_needs_cpu_quick_check(cpu); + } + +-/* +- * Check to see if we need to continue a callback-flush operations to +- * allow the last CPU to enter dyntick-idle mode. But fast dyntick-idle +- * entry is not configured, so we never do need to. +- */ +-static void rcu_needs_cpu_flush(void) +-{ +-} +- + #else /* #if !defined(CONFIG_RCU_FAST_NO_HZ) */ + + #define RCU_NEEDS_CPU_FLUSHES 5 +@@ -1991,20 +1982,4 @@ int rcu_needs_cpu(int cpu) + return c; + } + +-/* +- * Check to see if we need to continue a callback-flush operations to +- * allow the last CPU to enter dyntick-idle mode. +- */ +-static void rcu_needs_cpu_flush(void) +-{ +- int cpu = smp_processor_id(); +- unsigned long flags; +- +- if (per_cpu(rcu_dyntick_drain, cpu) <= 0) +- return; +- local_irq_save(flags); +- (void)rcu_needs_cpu(cpu); +- local_irq_restore(flags); +-} +- + #endif /* #else #if !defined(CONFIG_RCU_FAST_NO_HZ) */ |