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: Patryk Wlazlyn <patryk.wlazlyn@linux.intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
Patryk Wlazlyn 2025-01-14 16:11:28 +01:00 committed by Len Brown
parent 1af5baeda5
commit 7c6fee25bd

View File

@ -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;