From: Paul E. McKenney Date: Wed, 11 May 2022 18:49:35 +0000 (-0700) Subject: Merge branch 'exp.2022.05.11a' into HEAD X-Git-Url: https://repo.jachan.dev/J-linux.git/commitdiff_plain/ce13389053a347aa9f8ffbfda2238352536e15c9 Merge branch 'exp.2022.05.11a' into HEAD exp.2022.05.11a: Expedited-grace-period latency-reduction updates. --- ce13389053a347aa9f8ffbfda2238352536e15c9 diff --cc kernel/rcu/rcu.h index a985dfc2ce26,e27bf7d1e3a4..152492d52715 --- a/kernel/rcu/rcu.h +++ b/kernel/rcu/rcu.h @@@ -536,9 -536,12 +538,14 @@@ int rcu_get_gp_kthreads_prio(void) void rcu_fwd_progress_check(unsigned long j); void rcu_force_quiescent_state(void); extern struct workqueue_struct *rcu_gp_wq; + #ifdef CONFIG_RCU_EXP_KTHREAD + extern struct kthread_worker *rcu_exp_gp_kworker; + extern struct kthread_worker *rcu_exp_par_gp_kworker; + #else /* !CONFIG_RCU_EXP_KTHREAD */ extern struct workqueue_struct *rcu_par_gp_wq; + #endif /* CONFIG_RCU_EXP_KTHREAD */ +void rcu_gp_slow_register(atomic_t *rgssp); +void rcu_gp_slow_unregister(atomic_t *rgssp); #endif /* #else #ifdef CONFIG_TINY_RCU */ #ifdef CONFIG_RCU_NOCB_CPU diff --cc kernel/rcu/tree.c index 75a35b7adbfa,763e45fdf49b..c25ba442044a --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@@ -4553,15 -4542,11 +4598,17 @@@ static int __init rcu_spawn_gp_kthread( smp_store_release(&rcu_state.gp_kthread, t); /* ^^^ */ raw_spin_unlock_irqrestore_rcu_node(rnp, flags); wake_up_process(t); - rcu_spawn_nocb_kthreads(); - rcu_spawn_boost_kthreads(); + /* This is a pre-SMP initcall, we expect a single CPU */ + WARN_ON(num_online_cpus() > 1); + /* + * Those kthreads couldn't be created on rcu_init() -> rcutree_prepare_cpu() + * due to rcu_scheduler_fully_active. + */ + rcu_spawn_cpu_nocb_kthread(smp_processor_id()); + rcu_spawn_one_boost_kthread(rdp->mynode); rcu_spawn_core_kthreads(); + /* Create kthread worker for expedited GPs */ + rcu_start_exp_gp_kworkers(); return 0; } early_initcall(rcu_spawn_gp_kthread);