]> www.infradead.org Git - users/hch/misc.git/commitdiff
tools/power turbostat: Check for non-zero value when MSR probing
authorPatryk Wlazlyn <patryk.wlazlyn@linux.intel.com>
Tue, 14 Jan 2025 15:11:28 +0000 (16:11 +0100)
committerLen Brown <len.brown@intel.com>
Mon, 27 Jan 2025 17:35:22 +0000 (11:35 -0600)
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>
tools/power/x86/turbostat/turbostat.c

index adcf5f0a0633433ffcd44941c913a63efc2c0c96..6b72b922e2f5d3cdd50a5b24a93d2eea69b3c4dc 100644 (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;