Commit 7c6fee25 authored by Patryk Wlazlyn's avatar Patryk Wlazlyn Committed by Len Brown
Browse files

tools/power turbostat: Check for non-zero value when MSR probing



For some MSRs, for example, the Platform Energy Counter (RAPL PSYS), it
is required to additionally check for a non-zero value to confirm that
it is present.

From Intel SDM vol. 4:

    Platform Energy Counter (R/O)
    This MSR is valid only if both platform vendor hardware
    implementation and BIOS enablement support it.
    This MSR will read 0 if not valid.

Signed-off-by: default avatarPatryk Wlazlyn <patryk.wlazlyn@linux.intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 1af5baed
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -2113,13 +2113,17 @@ int get_msr(int cpu, off_t offset, unsigned long long *msr)
int probe_msr(int cpu, off_t offset)
{
	ssize_t retval;
	unsigned long long dummy;
	unsigned long long value;

	assert(!no_msr);

	retval = pread(get_msr_fd(cpu), &dummy, sizeof(dummy), offset);
	retval = pread(get_msr_fd(cpu), &value, sizeof(value), offset);

	if (retval != sizeof(dummy))
	/*
	 * Expect MSRs to accumulate some non-zero value since the system was powered on.
	 * Treat zero as a read failure.
	 */
	if (retval != sizeof(value) || value == 0)
		return 1;

	return 0;