Commit 041ee6f3 authored by Frederic Weisbecker's avatar Frederic Weisbecker
Browse files

kthread: Rely on HK_TYPE_DOMAIN for preferred affinity management



Unbound kthreads want to run neither on nohz_full CPUs nor on domain
isolated CPUs. And since nohz_full implies domain isolation, checking
the latter is enough to verify both.

Therefore exclude kthreads from domain isolation.

Signed-off-by: default avatarFrederic Weisbecker <frederic@kernel.org>
Reviewed-by: default avatarWaiman Long <longman@redhat.com>
Cc: Marco Crivellari <marco.crivellari@suse.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Tejun Heo <tj@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Waiman Long <longman@redhat.com>
parent 92a73460
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -362,18 +362,20 @@ static void kthread_fetch_affinity(struct kthread *kthread, struct cpumask *cpum
{
	const struct cpumask *pref;

	guard(rcu)();

	if (kthread->preferred_affinity) {
		pref = kthread->preferred_affinity;
	} else {
		if (kthread->node == NUMA_NO_NODE)
			pref = housekeeping_cpumask(HK_TYPE_KTHREAD);
			pref = housekeeping_cpumask(HK_TYPE_DOMAIN);
		else
			pref = cpumask_of_node(kthread->node);
	}

	cpumask_and(cpumask, pref, housekeeping_cpumask(HK_TYPE_KTHREAD));
	cpumask_and(cpumask, pref, housekeeping_cpumask(HK_TYPE_DOMAIN));
	if (cpumask_empty(cpumask))
		cpumask_copy(cpumask, housekeeping_cpumask(HK_TYPE_KTHREAD));
		cpumask_copy(cpumask, housekeeping_cpumask(HK_TYPE_DOMAIN));
}

static void kthread_affine_node(void)