Commit 79c11fb3 authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Peter Zijlstra
Browse files

sched/mmcid: Use cpumask_weighted_or()



Use cpumask_weighted_or() instead of cpumask_or() and cpumask_weight() on
the result, which walks the same bitmap twice. Results in 10-20% less
cycles, which reduces the runqueue lock hold time.

Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: default avatarMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Acked-by: default avatarYury Norov (NVIDIA) <yury.norov@gmail.com>
Link: https://patch.msgid.link/20251119172549.511736272@linutronix.de
parent 437cb3de
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -10377,6 +10377,7 @@ void call_trace_sched_update_nr_running(struct rq *rq, int count)
static inline void mm_update_cpus_allowed(struct mm_struct *mm, const struct cpumask *affmsk)
{
	struct cpumask *mm_allowed;
	unsigned int weight;

	if (!mm)
		return;
@@ -10387,8 +10388,8 @@ static inline void mm_update_cpus_allowed(struct mm_struct *mm, const struct cpu
	 */
	guard(raw_spinlock)(&mm->mm_cid.lock);
	mm_allowed = mm_cpus_allowed(mm);
	cpumask_or(mm_allowed, mm_allowed, affmsk);
	WRITE_ONCE(mm->mm_cid.nr_cpus_allowed, cpumask_weight(mm_allowed));
	weight = cpumask_weighted_or(mm_allowed, mm_allowed, affmsk);
	WRITE_ONCE(mm->mm_cid.nr_cpus_allowed, weight);
}

void sched_mm_cid_exit_signals(struct task_struct *t)