diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2014-04-01 14:20:36 -0400 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2014-04-29 11:45:19 -0400 |
commit | 5057f55e543b7859cfd26bc281291795eac93f8a (patch) | |
tree | 37cf522d549037e6e31d57159d8ab7668e085715 /kernel/rcu/tree_plugin.h | |
parent | 71a9b26963f8c2d0df6f782e2b29ccefc22d4fba (diff) |
rcu: Bind RCU grace-period kthreads if NO_HZ_FULL
Currently, RCU binds the grace-period kthreads to the timekeeping
CPU only if CONFIG_NO_HZ_FULL_SYSIDLE=y. This means that these
kthreads must be bound manually when CONFIG_NO_HZ_FULL_SYSIDLE=n and
CONFIG_NO_HZ_FULL=y: Otherwise, these kthreads will induce OS jitter on
random CPUs. Given that we are trying to reduce the amount of manual
tweaking required to make CONFIG_NO_HZ_FULL=y work nicely, this commit
makes this binding happen when CONFIG_NO_HZ_FULL=y, even in cases where
CONFIG_NO_HZ_FULL_SYSIDLE=n.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Diffstat (limited to 'kernel/rcu/tree_plugin.h')
-rw-r--r-- | kernel/rcu/tree_plugin.h | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h index 1af19e006899..045c6d04ed3f 100644 --- a/kernel/rcu/tree_plugin.h +++ b/kernel/rcu/tree_plugin.h | |||
@@ -2596,20 +2596,6 @@ static bool is_sysidle_rcu_state(struct rcu_state *rsp) | |||
2596 | } | 2596 | } |
2597 | 2597 | ||
2598 | /* | 2598 | /* |
2599 | * Bind the grace-period kthread for the sysidle flavor of RCU to the | ||
2600 | * timekeeping CPU. | ||
2601 | */ | ||
2602 | static void rcu_bind_gp_kthread(void) | ||
2603 | { | ||
2604 | int cpu = ACCESS_ONCE(tick_do_timer_cpu); | ||
2605 | |||
2606 | if (cpu < 0 || cpu >= nr_cpu_ids) | ||
2607 | return; | ||
2608 | if (raw_smp_processor_id() != cpu) | ||
2609 | set_cpus_allowed_ptr(current, cpumask_of(cpu)); | ||
2610 | } | ||
2611 | |||
2612 | /* | ||
2613 | * Return a delay in jiffies based on the number of CPUs, rcu_node | 2599 | * Return a delay in jiffies based on the number of CPUs, rcu_node |
2614 | * leaf fanout, and jiffies tick rate. The idea is to allow larger | 2600 | * leaf fanout, and jiffies tick rate. The idea is to allow larger |
2615 | * systems more time to transition to full-idle state in order to | 2601 | * systems more time to transition to full-idle state in order to |
@@ -2819,10 +2805,6 @@ static bool is_sysidle_rcu_state(struct rcu_state *rsp) | |||
2819 | return false; | 2805 | return false; |
2820 | } | 2806 | } |
2821 | 2807 | ||
2822 | static void rcu_bind_gp_kthread(void) | ||
2823 | { | ||
2824 | } | ||
2825 | |||
2826 | static void rcu_sysidle_report_gp(struct rcu_state *rsp, int isidle, | 2808 | static void rcu_sysidle_report_gp(struct rcu_state *rsp, int isidle, |
2827 | unsigned long maxj) | 2809 | unsigned long maxj) |
2828 | { | 2810 | { |
@@ -2853,3 +2835,19 @@ static bool rcu_nohz_full_cpu(struct rcu_state *rsp) | |||
2853 | #endif /* #ifdef CONFIG_NO_HZ_FULL */ | 2835 | #endif /* #ifdef CONFIG_NO_HZ_FULL */ |
2854 | return 0; | 2836 | return 0; |
2855 | } | 2837 | } |
2838 | |||
2839 | /* | ||
2840 | * Bind the grace-period kthread for the sysidle flavor of RCU to the | ||
2841 | * timekeeping CPU. | ||
2842 | */ | ||
2843 | static void rcu_bind_gp_kthread(void) | ||
2844 | { | ||
2845 | #ifdef CONFIG_NO_HZ_FULL | ||
2846 | int cpu = ACCESS_ONCE(tick_do_timer_cpu); | ||
2847 | |||
2848 | if (cpu < 0 || cpu >= nr_cpu_ids) | ||
2849 | return; | ||
2850 | if (raw_smp_processor_id() != cpu) | ||
2851 | set_cpus_allowed_ptr(current, cpumask_of(cpu)); | ||
2852 | #endif /* #ifdef CONFIG_NO_HZ_FULL */ | ||
2853 | } | ||