Message ID | 20230315194349.10798-4-joel@joelfernandes.org (mailing list archive) |
---|---|
State | Accepted |
Commit | db8f8eb1c0353398b10c4a2a4acc6e1e67765f9f |
Headers | show |
Series | [1/9] rcu: Fix set/clear TICK_DEP_BIT_RCU_EXP bitmask race | expand |
Le Wed, Mar 15, 2023 at 07:43:44PM +0000, Joel Fernandes (Google) a écrit : > From: Zqiang <qiang1.zhang@intel.com> > > The lazy_rcu_shrink_count() shrinker function is registered even in > kernels built with CONFIG_RCU_LAZY=n, in which case this function > uselessly consumes cycles learning that no CPU has any lazy callbacks > queued. > > This commit therefore registers this shrinker function only in the kernels > built with CONFIG_RCU_LAZY=y, where it might actually do something useful. > > Signed-off-by: Zqiang <qiang1.zhang@intel.com> > Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org> > Signed-off-by: Paul E. McKenney <paulmck@kernel.org> > Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
On Thu, Mar 16, 2023 at 12:19:19AM +0100, Frederic Weisbecker wrote: > Le Wed, Mar 15, 2023 at 07:43:44PM +0000, Joel Fernandes (Google) a écrit : > > From: Zqiang <qiang1.zhang@intel.com> > > > > The lazy_rcu_shrink_count() shrinker function is registered even in > > kernels built with CONFIG_RCU_LAZY=n, in which case this function > > uselessly consumes cycles learning that no CPU has any lazy callbacks > > queued. > > > > This commit therefore registers this shrinker function only in the kernels > > built with CONFIG_RCU_LAZY=y, where it might actually do something useful. > > > > Signed-off-by: Zqiang <qiang1.zhang@intel.com> > > Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org> > > Signed-off-by: Paul E. McKenney <paulmck@kernel.org> > > Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> > > Reviewed-by: Frederic Weisbecker <frederic@kernel.org> Thanks! - Joel
diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h index 9e1c8caec5ce..f2280616f9d5 100644 --- a/kernel/rcu/tree_nocb.h +++ b/kernel/rcu/tree_nocb.h @@ -1312,6 +1312,7 @@ int rcu_nocb_cpu_offload(int cpu) } EXPORT_SYMBOL_GPL(rcu_nocb_cpu_offload); +#ifdef CONFIG_RCU_LAZY static unsigned long lazy_rcu_shrink_count(struct shrinker *shrink, struct shrink_control *sc) { @@ -1360,6 +1361,7 @@ static struct shrinker lazy_rcu_shrinker = { .batch = 0, .seeks = DEFAULT_SEEKS, }; +#endif // #ifdef CONFIG_RCU_LAZY void __init rcu_init_nohz(void) { @@ -1391,8 +1393,10 @@ void __init rcu_init_nohz(void) if (!rcu_state.nocb_is_setup) return; +#ifdef CONFIG_RCU_LAZY if (register_shrinker(&lazy_rcu_shrinker, "rcu-lazy")) pr_err("Failed to register lazy_rcu shrinker!\n"); +#endif // #ifdef CONFIG_RCU_LAZY if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) { pr_info("\tNote: kernel parameter 'rcu_nocbs=', 'nohz_full', or 'isolcpus=' contains nonexistent CPUs.\n");