Commit c2eb6d1a authored by Rafael J. Wysocki's avatar Rafael J. Wysocki Committed by Lin Yujun
Browse files

cpufreq: Reorganize checks in cpufreq_offline()

stable inclusion
from stable-v5.10.219
commit 3a28fbf533d88827d8f2df347ac9d9c4ea2c0664
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IA6SHN
CVE: CVE-2024-38615

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=3a28fbf533d88827d8f2df347ac9d9c4ea2c0664



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

[ Upstream commit e1e962c5 ]

Notice that cpufreq_offline() only needs to check policy_is_inactive()
once and rearrange the code in there to make that happen.

No expected functional impact.

Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Stable-dep-of: b8f85833c057 ("cpufreq: exit() callback is optional")
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarLin Yujun <linyujun809@huawei.com>
parent 5467c8fd
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -1576,24 +1576,18 @@ static int cpufreq_offline(unsigned int cpu)
	}

	down_write(&policy->rwsem);

	if (has_target())
		cpufreq_stop_governor(policy);

	cpumask_clear_cpu(cpu, policy->cpus);

	if (policy_is_inactive(policy)) {
		if (has_target())
			strncpy(policy->last_governor, policy->governor->name,
				CPUFREQ_NAME_LEN);
		else
			policy->last_policy = policy->policy;
	} else if (cpu == policy->cpu) {
		/* Nominate new CPU */
	if (!policy_is_inactive(policy)) {
		/* Nominate a new CPU if necessary. */
		if (cpu == policy->cpu)
			policy->cpu = cpumask_any(policy->cpus);
	}

	/* Start governor again for active policy */
	if (!policy_is_inactive(policy)) {
		/* Start the governor again for the active policy. */
		if (has_target()) {
			ret = cpufreq_start_governor(policy);
			if (ret)
@@ -1603,6 +1597,12 @@ static int cpufreq_offline(unsigned int cpu)
		goto unlock;
	}

	if (has_target())
		strncpy(policy->last_governor, policy->governor->name,
			CPUFREQ_NAME_LEN);
	else
		policy->last_policy = policy->policy;

	if (cpufreq_thermal_control_enabled(cpufreq_driver)) {
		cpufreq_cooling_unregister(policy->cdev);
		policy->cdev = NULL;