aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcutree.c
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2013-03-26 18:47:24 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2013-04-19 07:54:04 -0400
commitd1e43fa5f8bb25f83a86a29f11fcfb57ed4d7566 (patch)
tree9eff00255c1061248b6aef2c8341ea527610150c /kernel/rcutree.c
parent0453b435df0d69dd0d8c42eb9b3015aaf0d8a032 (diff)
nohz: Ensure full dynticks CPUs are RCU nocbs
We need full dynticks CPU to also be RCU nocb so that we don't have to keep the tick to handle RCU callbacks. Make sure the range passed to nohz_full= boot parameter is a subset of rcu_nocbs= The CPUs that fail to meet this requirement will be excluded from the nohz_full range. This is checked early in boot time, before any CPU has the opportunity to stop its tick. Suggested-by: Steven Rostedt <rostedt@goodmis.org> Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Chris Metcalf <cmetcalf@tilera.com> Cc: Christoph Lameter <cl@linux.com> Cc: Geoff Levand <geoff@infradead.org> Cc: Gilad Ben Yossef <gilad@benyossef.com> Cc: Hakan Akkan <hakanakkan@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Kevin Hilman <khilman@linaro.org> Cc: Li Zhong <zhong@linux.vnet.ibm.com> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Paul Gortmaker <paul.gortmaker@windriver.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/rcutree.c')
-rw-r--r--kernel/rcutree.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index f5ab50235cba..1d4ceff793a4 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -1695,7 +1695,7 @@ rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp,
1695 struct rcu_node *rnp, struct rcu_data *rdp) 1695 struct rcu_node *rnp, struct rcu_data *rdp)
1696{ 1696{
1697 /* No-CBs CPUs do not have orphanable callbacks. */ 1697 /* No-CBs CPUs do not have orphanable callbacks. */
1698 if (is_nocb_cpu(rdp->cpu)) 1698 if (rcu_is_nocb_cpu(rdp->cpu))
1699 return; 1699 return;
1700 1700
1701 /* 1701 /*
@@ -2757,10 +2757,10 @@ static void _rcu_barrier(struct rcu_state *rsp)
2757 * corresponding CPU's preceding callbacks have been invoked. 2757 * corresponding CPU's preceding callbacks have been invoked.
2758 */ 2758 */
2759 for_each_possible_cpu(cpu) { 2759 for_each_possible_cpu(cpu) {
2760 if (!cpu_online(cpu) && !is_nocb_cpu(cpu)) 2760 if (!cpu_online(cpu) && !rcu_is_nocb_cpu(cpu))
2761 continue; 2761 continue;
2762 rdp = per_cpu_ptr(rsp->rda, cpu); 2762 rdp = per_cpu_ptr(rsp->rda, cpu);
2763 if (is_nocb_cpu(cpu)) { 2763 if (rcu_is_nocb_cpu(cpu)) {
2764 _rcu_barrier_trace(rsp, "OnlineNoCB", cpu, 2764 _rcu_barrier_trace(rsp, "OnlineNoCB", cpu,
2765 rsp->n_barrier_done); 2765 rsp->n_barrier_done);
2766 atomic_inc(&rsp->barrier_cpu_count); 2766 atomic_inc(&rsp->barrier_cpu_count);