Commit 8d358893 authored by Yang Yingliang's avatar Yang Yingliang Committed by Zheng Zucheng
Browse files

sched/smt: Introduce sched_smt_present_inc/dec() helper

mainline inclusion
from mainline-v6.11-rc1
commit 31b164e2e4af84d08d2498083676e7eeaa102493
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAOXYI
CVE: CVE-2024-44958

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=31b164e2e4af84d08d2498083676e7eeaa102493



--------------------------------

Introduce sched_smt_present_inc/dec() helper, so it can be called
in normal or error path simply. No functional changed.

Cc: stable@kernel.org
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20240703031610.587047-2-yangyingliang@huaweicloud.com



Conflicts:
    kernel/sched/core.c
[Some contexts around sched_cpu_deactivate different. No functional impact.]
Signed-off-by: default avatarZheng Zucheng <zhengzucheng@huawei.com>
parent 02f95e7a
Loading
Loading
Loading
Loading
+19 −7
Original line number Diff line number Diff line
@@ -9711,6 +9711,22 @@ static int cpuset_cpu_inactive(unsigned int cpu)
	return 0;
}

static inline void sched_smt_present_inc(int cpu)
{
#ifdef CONFIG_SCHED_SMT
	if (cpumask_weight(cpu_smt_mask(cpu)) == 2)
		static_branch_inc_cpuslocked(&sched_smt_present);
#endif
}

static inline void sched_smt_present_dec(int cpu)
{
#ifdef CONFIG_SCHED_SMT
	if (cpumask_weight(cpu_smt_mask(cpu)) == 2)
		static_branch_dec_cpuslocked(&sched_smt_present);
#endif
}

int sched_cpu_activate(unsigned int cpu)
{
	struct rq *rq = cpu_rq(cpu);
@@ -9722,13 +9738,10 @@ int sched_cpu_activate(unsigned int cpu)
	 */
	balance_push_set(cpu, false);

#ifdef CONFIG_SCHED_SMT
	/*
	 * When going up, increment the number of cores with SMT present.
	 */
	if (cpumask_weight(cpu_smt_mask(cpu)) == 2)
		static_branch_inc_cpuslocked(&sched_smt_present);
#endif
	sched_smt_present_inc(cpu);
	set_cpu_active(cpu, true);
#ifdef CONFIG_QOS_SCHED_SMART_GRID
	tg_update_affinity_domains(cpu, 1);
@@ -9800,13 +9813,12 @@ int sched_cpu_deactivate(unsigned int cpu)
	}
	rq_unlock_irqrestore(rq, &rf);

#ifdef CONFIG_SCHED_SMT
	/*
	 * When going down, decrement the number of cores with SMT present.
	 */
	if (cpumask_weight(cpu_smt_mask(cpu)) == 2)
		static_branch_dec_cpuslocked(&sched_smt_present);
	sched_smt_present_dec(cpu);

#ifdef CONFIG_SCHED_SMT
	sched_core_cpu_deactivate(cpu);
#endif