Commit f3acf7ff authored by K Prateek Nayak's avatar K Prateek Nayak Committed by Mario Limonciello (AMD)
Browse files

cpufreq/amd-pstate: Reorder notifier unregistration and floor perf reset



An active power supply notifier can race with amd_pstate_epp_cpu_exit()
trying to reset the floor perf and can overwrite the floor perf set in
MSR_AMD_CPPC_REQ.

Unregister the notifier before setting the floor perf to prevent the
rare race.

Fixes: e30ca6dd ("cpufreq/amd-pstate: Add dynamic energy performance preference")
Reviewed-by: default avatarMario Limonciello <mario.limonciello@amd.com>
Signed-off-by: default avatarK Prateek Nayak <kprateek.nayak@amd.com>
Link: https://lore.kernel.org/r/20260508051748.10484-5-kprateek.nayak@amd.com


Signed-off-by: default avatarMario Limonciello (AMD) <superm1@kernel.org>
parent c5eed6dd
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -1982,12 +1982,13 @@ static void amd_pstate_epp_cpu_exit(struct cpufreq_policy *policy)
	if (cpudata) {
		union perf_cached perf = READ_ONCE(cpudata->perf);

		if (cpudata->dynamic_epp)
			amd_pstate_clear_dynamic_epp(policy);

		/* Reset CPPC_REQ MSR to the BIOS value */
		amd_pstate_update_perf(policy, perf.bios_min_perf, 0U, 0U, 0U, false);
		amd_pstate_set_floor_perf(policy, cpudata->bios_floor_perf);

		if (cpudata->dynamic_epp)
			amd_pstate_clear_dynamic_epp(policy);
		kfree(cpudata);
		policy->driver_data = NULL;
	}