Commit 2167bb92 authored by Zihuan Zhang's avatar Zihuan Zhang Committed by Rafael J. Wysocki
Browse files

ACPI: processor: thermal: Release policy references using __free()



Replace the manual cpufreq_cpu_put() with __free(put_cpufreq_policy)
for policy references. This reduces the risk of reference counting
mistakes and aligns the code with the latest kernel style.

No functional change intended.

Signed-off-by: default avatarZihuan Zhang <zhangzihuan@kylinos.cn>
Link: https://patch.msgid.link/20250905132413.1376220-3-zhangzihuan@kylinos.cn


[ rjw: Subject and changelog edits, whitespace fixups ]
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 9d68320b
Loading
Loading
Loading
Loading
+27 −25
Original line number Diff line number Diff line
@@ -62,19 +62,14 @@ static int phys_package_first_cpu(int cpu)
	return 0;
}

static int cpu_has_cpufreq(unsigned int cpu)
static bool cpu_has_cpufreq(unsigned int cpu)
{
	struct cpufreq_policy *policy;

	if (!acpi_processor_cpufreq_init)
		return 0;

	policy = cpufreq_cpu_get(cpu);
	if (policy) {
		cpufreq_cpu_put(policy);
		return 1;
	}
	return 0;
	struct cpufreq_policy *policy __free(put_cpufreq_policy) = cpufreq_cpu_get(cpu);

	return policy != NULL;
}

static int cpufreq_get_max_state(unsigned int cpu)
@@ -93,12 +88,31 @@ static int cpufreq_get_cur_state(unsigned int cpu)
	return reduction_step(cpu);
}

static bool cpufreq_update_thermal_limit(unsigned int cpu, struct acpi_processor *pr)
{
	unsigned long max_freq;
	int ret;

	struct cpufreq_policy *policy __free(put_cpufreq_policy) = cpufreq_cpu_get(cpu);
	if (!policy)
		return false;

	max_freq = (policy->cpuinfo.max_freq *
		(100 - reduction_step(cpu) * cpufreq_thermal_reduction_pctg)) / 100;

	ret = freq_qos_update_request(&pr->thermal_req, max_freq);
	if (ret < 0) {
		pr_warn("Failed to update thermal freq constraint: CPU%d (%d)\n",
			pr->id, ret);
	}

	return true;
}

static int cpufreq_set_cur_state(unsigned int cpu, int state)
{
	struct cpufreq_policy *policy;
	struct acpi_processor *pr;
	unsigned long max_freq;
	int i, ret;
	int i;

	if (!cpu_has_cpufreq(cpu))
		return 0;
@@ -120,20 +134,8 @@ static int cpufreq_set_cur_state(unsigned int cpu, int state)
		if (unlikely(!freq_qos_request_active(&pr->thermal_req)))
			continue;

		policy = cpufreq_cpu_get(i);
		if (!policy)
		if (!cpufreq_update_thermal_limit(i, pr))
			return -EINVAL;

		max_freq = (policy->cpuinfo.max_freq *
			    (100 - reduction_step(i) * cpufreq_thermal_reduction_pctg)) / 100;

		cpufreq_cpu_put(policy);

		ret = freq_qos_update_request(&pr->thermal_req, max_freq);
		if (ret < 0) {
			pr_warn("Failed to update thermal freq constraint: CPU%d (%d)\n",
				pr->id, ret);
		}
	}
	return 0;
}