rcu: s/boost_kthread_mutex/kthread_mutex
authorFrederic Weisbecker <frederic@kernel.org>
Fri, 12 Jan 2024 15:46:17 +0000 (16:46 +0100)
committerBoqun Feng <boqun.feng@gmail.com>
Wed, 14 Feb 2024 15:51:36 +0000 (07:51 -0800)
This mutex is currently protecting per node boost kthreads creation and
affinity setting across CPU hotplug operations.

Since the expedited kworkers will soon be split per node as well, they
will be subject to the same concurrency constraints against hotplug.

Therefore their creation and affinity tuning operations will be grouped
with those of boost kthreads and then rely on the same mutex.

To prepare for that, generalize its name.

Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
kernel/rcu/tree.c
kernel/rcu/tree.h
kernel/rcu/tree_plugin.h

index f2c10d351b597c34a88ca1319b892941f9f29150..cdb80835c4693e5f7e6d3fdc273f94b425abdc90 100644 (file)
@@ -4918,7 +4918,7 @@ static void __init rcu_init_one(void)
                        init_waitqueue_head(&rnp->exp_wq[2]);
                        init_waitqueue_head(&rnp->exp_wq[3]);
                        spin_lock_init(&rnp->exp_lock);
-                       mutex_init(&rnp->boost_kthread_mutex);
+                       mutex_init(&rnp->kthread_mutex);
                        raw_spin_lock_init(&rnp->exp_poll_lock);
                        rnp->exp_seq_poll_rq = RCU_GET_STATE_COMPLETED;
                        INIT_WORK(&rnp->exp_poll_wq, sync_rcu_do_polled_gp);
index e9821a8422dbe7d327f875a633a8d4fc1348feba..13e7b0d907ab05563e52bbc4a0417ff7e0225e18 100644 (file)
@@ -113,7 +113,7 @@ struct rcu_node {
                                /*  side effect, not as a lock. */
        unsigned long boost_time;
                                /* When to start boosting (jiffies). */
-       struct mutex boost_kthread_mutex;
+       struct mutex kthread_mutex;
                                /* Exclusion for thread spawning and affinity */
                                /*  manipulation. */
        struct task_struct *boost_kthread_task;
index 41021080ad258d7f68d43762ceb2299266754712..0d307674915c60dab214024c166343fbf9f3dfcf 100644 (file)
@@ -1195,7 +1195,7 @@ static void rcu_spawn_one_boost_kthread(struct rcu_node *rnp)
        struct sched_param sp;
        struct task_struct *t;
 
-       mutex_lock(&rnp->boost_kthread_mutex);
+       mutex_lock(&rnp->kthread_mutex);
        if (rnp->boost_kthread_task || !rcu_scheduler_fully_active)
                goto out;
 
@@ -1212,7 +1212,7 @@ static void rcu_spawn_one_boost_kthread(struct rcu_node *rnp)
        wake_up_process(t); /* get to TASK_INTERRUPTIBLE quickly. */
 
  out:
-       mutex_unlock(&rnp->boost_kthread_mutex);
+       mutex_unlock(&rnp->kthread_mutex);
 }
 
 /*
@@ -1224,7 +1224,7 @@ static void rcu_spawn_one_boost_kthread(struct rcu_node *rnp)
  * no outgoing CPU.  If there are no CPUs left in the affinity set,
  * this function allows the kthread to execute on any CPU.
  *
- * Any future concurrent calls are serialized via ->boost_kthread_mutex.
+ * Any future concurrent calls are serialized via ->kthread_mutex.
  */
 static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
 {
@@ -1237,7 +1237,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
                return;
        if (!zalloc_cpumask_var(&cm, GFP_KERNEL))
                return;
-       mutex_lock(&rnp->boost_kthread_mutex);
+       mutex_lock(&rnp->kthread_mutex);
        mask = rcu_rnp_online_cpus(rnp);
        for_each_leaf_node_possible_cpu(rnp, cpu)
                if ((mask & leaf_node_cpu_bit(rnp, cpu)) &&
@@ -1250,7 +1250,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
                        cpumask_clear_cpu(outgoingcpu, cm);
        }
        set_cpus_allowed_ptr(t, cm);
-       mutex_unlock(&rnp->boost_kthread_mutex);
+       mutex_unlock(&rnp->kthread_mutex);
        free_cpumask_var(cm);
 }