aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/rcu/tree_plugin.h
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2014-07-16 10:37:06 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2014-07-16 13:44:46 -0400
commit187497fa5e9e9383820d33e48b87f8200a747c2a (patch)
tree7941e912b1a123cf2213797ca49a70bdfa550778 /kernel/rcu/tree_plugin.h
parent1823172ab582eb54456fd1354869bb850a1196ba (diff)
rcu: Allow for NULL tick_nohz_full_mask when nohz_full= missing
If there isn't a nohz_full= kernel parameter specified, then tick_nohz_full_mask can legitimately be NULL. This can cause problems when RCU's boot code tries to cpumask_or() this value into rcu_nocb_mask. In addition, if NO_HZ_FULL_ALL=y, there is no point in doing the cpumask_or() in the first place because this will cause RCU_NOCB_CPU_ALL=y, which in turn will have all bits already set in rcu_nocb_mask. This commit therefore avoids the cpumask_or() if NO_HZ_FULL_ALL=y and checks for !tick_nohz_full_running otherwise, this latter check catching cases when there was no nohz_full= kernel parameter specified. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'kernel/rcu/tree_plugin.h')
-rw-r--r--kernel/rcu/tree_plugin.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
index f62b7f2f6abd..00dc411e9676 100644
--- a/kernel/rcu/tree_plugin.h
+++ b/kernel/rcu/tree_plugin.h
@@ -2479,9 +2479,10 @@ static void __init rcu_spawn_nocb_kthreads(struct rcu_state *rsp)
2479 2479
2480 if (rcu_nocb_mask == NULL) 2480 if (rcu_nocb_mask == NULL)
2481 return; 2481 return;
2482#ifdef CONFIG_NO_HZ_FULL 2482#if defined(CONFIG_NO_HZ_FULL) && !defined(CONFIG_NO_HZ_FULL_ALL)
2483 cpumask_or(rcu_nocb_mask, rcu_nocb_mask, tick_nohz_full_mask); 2483 if (tick_nohz_full_running)
2484#endif /* #ifdef CONFIG_NO_HZ_FULL */ 2484 cpumask_or(rcu_nocb_mask, rcu_nocb_mask, tick_nohz_full_mask);
2485#endif /* #if defined(CONFIG_NO_HZ_FULL) && !defined(CONFIG_NO_HZ_FULL_ALL) */
2485 if (ls == -1) { 2486 if (ls == -1) {
2486 ls = int_sqrt(nr_cpu_ids); 2487 ls = int_sqrt(nr_cpu_ids);
2487 rcu_nocb_leader_stride = ls; 2488 rcu_nocb_leader_stride = ls;