Skip to content

Commit a3450c5

Browse files
committed
Revert "rcu: Simplify rcu_init_nohz() cpumask handling"
This reverts commit 98ec984.
1 parent 27f3248 commit a3450c5

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

kernel/rcu/tree_nocb.h

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,34 +1210,45 @@ EXPORT_SYMBOL_GPL(rcu_nocb_cpu_offload);
12101210
void __init rcu_init_nohz(void)
12111211
{
12121212
int cpu;
1213+
bool need_rcu_nocb_mask = false;
1214+
bool offload_all = false;
12131215
struct rcu_data *rdp;
1214-
const struct cpumask *cpumask = NULL;
1215-
1216-
#if defined(CONFIG_NO_HZ_FULL)
1217-
if (tick_nohz_full_running && !cpumask_empty(tick_nohz_full_mask))
1218-
cpumask = tick_nohz_full_mask;
1219-
#endif
12201216

12211217
#if defined(CONFIG_RCU_NOCB_CPU_DEFAULT_ALL)
1222-
if (!rcu_state.nocb_is_setup && !cpumask)
1223-
cpumask = cpu_possible_mask;
1224-
#endif
1218+
if (!rcu_state.nocb_is_setup) {
1219+
need_rcu_nocb_mask = true;
1220+
offload_all = true;
1221+
}
1222+
#endif /* #if defined(CONFIG_RCU_NOCB_CPU_DEFAULT_ALL) */
1223+
1224+
#if defined(CONFIG_NO_HZ_FULL)
1225+
if (tick_nohz_full_running && !cpumask_empty(tick_nohz_full_mask)) {
1226+
need_rcu_nocb_mask = true;
1227+
offload_all = false; /* NO_HZ_FULL has its own mask. */
1228+
}
1229+
#endif /* #if defined(CONFIG_NO_HZ_FULL) */
12251230

1226-
if (cpumask) {
1231+
if (need_rcu_nocb_mask) {
12271232
if (!cpumask_available(rcu_nocb_mask)) {
12281233
if (!zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL)) {
12291234
pr_info("rcu_nocb_mask allocation failed, callback offloading disabled.\n");
12301235
return;
12311236
}
12321237
}
1233-
1234-
cpumask_or(rcu_nocb_mask, rcu_nocb_mask, cpumask);
12351238
rcu_state.nocb_is_setup = true;
12361239
}
12371240

12381241
if (!rcu_state.nocb_is_setup)
12391242
return;
12401243

1244+
#if defined(CONFIG_NO_HZ_FULL)
1245+
if (tick_nohz_full_running)
1246+
cpumask_or(rcu_nocb_mask, rcu_nocb_mask, tick_nohz_full_mask);
1247+
#endif /* #if defined(CONFIG_NO_HZ_FULL) */
1248+
1249+
if (offload_all)
1250+
cpumask_setall(rcu_nocb_mask);
1251+
12411252
if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) {
12421253
pr_info("\tNote: kernel parameter 'rcu_nocbs=', 'nohz_full', or 'isolcpus=' contains nonexistent CPUs.\n");
12431254
cpumask_and(rcu_nocb_mask, cpu_possible_mask,

0 commit comments

Comments
 (0)