diff options
author | Patryk Wlazlyn <patryk.wlazlyn@linux.intel.com> | 2025-01-14 16:11:28 +0100 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2025-01-27 11:35:22 -0600 |
commit | 7c6fee25bdf5c8f8a1bcc6fa3566fffb7fe9eb9a (patch) | |
tree | c81fb0556267dccf023356f5d1c5775420dba5e7 /tools | |
parent | 1af5baeda512d0940748fdf9b559e1041dbab0cf (diff) |
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>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/power/x86/turbostat/turbostat.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c index adcf5f0a06334..6b72b922e2f5d 100644 --- a/tools/power/x86/turbostat/turbostat.c +++ b/tools/power/x86/turbostat/turbostat.c @@ -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; |