Commit 9be7a8ee 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 c83b99f4
Loading
Loading
Loading
Loading
+18 −8
Original line number Diff line number Diff line
@@ -5831,18 +5831,31 @@ 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);
	struct rq_flags rf;

#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);
	tg_update_affinity_domains(cpu, 1);

@@ -5886,13 +5899,10 @@ int sched_cpu_deactivate(unsigned int cpu)
	 */
	synchronize_rcu_mult(call_rcu, call_rcu_sched);

#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);
#endif
	sched_smt_present_dec(cpu);

	if (!sched_smp_initialized)
		return 0;