On Mon, Aug 7, 2023 at 7:36 AM Qi Zheng <zhengqi.arch@xxxxxxxxxxxxx> wrote: > > Use new APIs to dynamically allocate the rcu-lazy shrinker. > > Signed-off-by: Qi Zheng <zhengqi.arch@xxxxxxxxxxxxx> For RCU: Reviewed-by: Joel Fernandes (Google) <joel@xxxxxxxxxxxxxxxxx> thanks, - Joel > --- > kernel/rcu/tree_nocb.h | 20 +++++++++++--------- > 1 file changed, 11 insertions(+), 9 deletions(-) > > diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h > index 5598212d1f27..e1c59c33738a 100644 > --- a/kernel/rcu/tree_nocb.h > +++ b/kernel/rcu/tree_nocb.h > @@ -1396,13 +1396,6 @@ lazy_rcu_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) > > return count ? count : SHRINK_STOP; > } > - > -static struct shrinker lazy_rcu_shrinker = { > - .count_objects = lazy_rcu_shrink_count, > - .scan_objects = lazy_rcu_shrink_scan, > - .batch = 0, > - .seeks = DEFAULT_SEEKS, > -}; > #endif // #ifdef CONFIG_RCU_LAZY > > void __init rcu_init_nohz(void) > @@ -1410,6 +1403,7 @@ void __init rcu_init_nohz(void) > int cpu; > struct rcu_data *rdp; > const struct cpumask *cpumask = NULL; > + struct shrinker * __maybe_unused lazy_rcu_shrinker; > > #if defined(CONFIG_NO_HZ_FULL) > if (tick_nohz_full_running && !cpumask_empty(tick_nohz_full_mask)) > @@ -1436,8 +1430,16 @@ void __init rcu_init_nohz(void) > return; > > #ifdef CONFIG_RCU_LAZY > - if (register_shrinker(&lazy_rcu_shrinker, "rcu-lazy")) > - pr_err("Failed to register lazy_rcu shrinker!\n"); > + lazy_rcu_shrinker = shrinker_alloc(0, "rcu-lazy"); > + if (!lazy_rcu_shrinker) { > + pr_err("Failed to allocate lazy_rcu shrinker!\n"); > + } else { > + lazy_rcu_shrinker->count_objects = lazy_rcu_shrink_count; > + lazy_rcu_shrinker->scan_objects = lazy_rcu_shrink_scan; > + lazy_rcu_shrinker->seeks = DEFAULT_SEEKS; > + > + shrinker_register(lazy_rcu_shrinker); > + } > #endif // #ifdef CONFIG_RCU_LAZY > > if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) { > -- > 2.30.2 >