]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
rcu: Avoid running boost kthreads on isolated CPUs
authorZqiang <qiang.zhang1211@gmail.com>
Mon, 15 Nov 2021 05:15:46 +0000 (13:15 +0800)
committerPaul E. McKenney <paulmck@kernel.org>
Wed, 1 Dec 2021 01:25:20 +0000 (17:25 -0800)
When the boost kthreads are created on systems with nohz_full CPUs,
the cpus_allowed_ptr is set to housekeeping_cpumask(HK_FLAG_KTHREAD).
However, when the rcu_boost_kthread_setaffinity() is called, the original
affinity will be changed and these kthreads can subsequently run on
nohz_full CPUs.  This commit makes rcu_boost_kthread_setaffinity()
restrict these boost kthreads to housekeeping CPUs.

Signed-off-by: Zqiang <qiang.zhang1211@gmail.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/rcu/tree_plugin.h

index f44580276fbdc4e01327f01d37a160f6c18340ab..87fc4609b75635b1ae9dcb915cecfe9d28234563 100644 (file)
@@ -1203,8 +1203,9 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
                if ((mask & leaf_node_cpu_bit(rnp, cpu)) &&
                    cpu != outgoingcpu)
                        cpumask_set_cpu(cpu, cm);
+       cpumask_and(cm, cm, housekeeping_cpumask(HK_FLAG_RCU));
        if (cpumask_weight(cm) == 0)
-               cpumask_setall(cm);
+               cpumask_copy(cm, housekeeping_cpumask(HK_FLAG_RCU));
        set_cpus_allowed_ptr(t, cm);
        free_cpumask_var(cm);
 }