Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b5c6a60 authored by Gautham R. Shenoy's avatar Gautham R. Shenoy Committed by Greg Kroah-Hartman
Browse files

pm: cpupower: Fix the snapshot-order of tsc,mperf, clock in mperf_stop()

[ Upstream commit cda7ac8ce7de84cf32a3871ba5f318aa3b79381e ]

In the function mperf_start(), mperf_monitor snapshots the time, tsc
and finally the aperf,mperf MSRs. However, this order of snapshotting
in is reversed in mperf_stop(). As a result, the C0 residency (which
is computed as delta_mperf * 100 / delta_tsc) is under-reported on
CPUs that is 100% busy.

Fix this by snapshotting time, tsc and then aperf,mperf in
mperf_stop() in the same order as in mperf_start().

Link: https://lore.kernel.org/r/20250612122355.19629-2-gautham.shenoy@amd.com


Signed-off-by: default avatarGautham R. Shenoy <gautham.shenoy@amd.com>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent c41fef8b
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -201,9 +201,9 @@ static int mperf_stop(void)
	int cpu;

	for (cpu = 0; cpu < cpu_count; cpu++) {
		mperf_measure_stats(cpu);
		mperf_get_tsc(&tsc_at_measure_end[cpu]);
		clock_gettime(CLOCK_REALTIME, &time_end[cpu]);
		mperf_get_tsc(&tsc_at_measure_end[cpu]);
		mperf_measure_stats(cpu);
	}

	return 0;