... bool need_rcu_nocb_mask = false; //#if defined(CONFIG_NO_HZ_FULL) if (tick_nohz_full_running && !cpumask_empty(tick_nohz_full_mask)) need_rcu_nocb_mask = true; <---- //Move it here //#endif | | if (need_rcu_nocb_mask) { | //Can only be true above ... ----- } The local variable 'need_rcu_nocb_mask' is true only if CONFIG_NO_HZ_FULL is defined. So branch "if (need_rcu_nocb_mask)" can be moved within the scope of "#if defined(CONFIG_NO_HZ_FULL)". At this point, using variable 'need_rcu_nocb_mask' is not necessary, so delete it. No functional changes, but the code looks a little more concise. The kernel built with CONFIG_NO_HZ_FULL=n and CONFIG_RCU_NOCB_CPU=y ran continuously for a whole day, no errors were reported. Signed-off-by: Zhen Lei <thunder.leizhen@xxxxxxxxxx> --- kernel/rcu/tree_nocb.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) v1 --> v2: Update commit message. diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h index 46694e13398a3ee..e7fe99eb58972a6 100644 --- a/kernel/rcu/tree_nocb.h +++ b/kernel/rcu/tree_nocb.h @@ -1154,15 +1154,10 @@ EXPORT_SYMBOL_GPL(rcu_nocb_cpu_offload); void __init rcu_init_nohz(void) { int cpu; - bool need_rcu_nocb_mask = false; struct rcu_data *rdp; #if defined(CONFIG_NO_HZ_FULL) - if (tick_nohz_full_running && !cpumask_empty(tick_nohz_full_mask)) - need_rcu_nocb_mask = true; -#endif /* #if defined(CONFIG_NO_HZ_FULL) */ - - if (need_rcu_nocb_mask) { + if (tick_nohz_full_running && !cpumask_empty(tick_nohz_full_mask)) { if (!cpumask_available(rcu_nocb_mask)) { if (!zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL)) { pr_info("rcu_nocb_mask allocation failed, callback offloading disabled.\n"); @@ -1171,6 +1166,7 @@ void __init rcu_init_nohz(void) } rcu_state.nocb_is_setup = true; } +#endif /* #if defined(CONFIG_NO_HZ_FULL) */ if (!rcu_state.nocb_is_setup) return; -- 2.25.1