x86: Add get_actual_pstate()
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 24 Oct 2017 20:04:34 +0000 (16:04 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 26 Oct 2017 18:33:29 +0000 (14:33 -0400)
This is useful for seeing what p-state a core is actually running at.  For
instance:

$ m monitor 4

(entered monitor on 4)

> kfunc get_actual_pstate

That'll tell you the p-state, and other cores won't be active, which can
interfere with the p-state the core can actually run at.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/x86/idle.c

index 523fdb1..402b047 100644 (file)
@@ -61,6 +61,15 @@ unsigned int get_pstate(void)
        return (perf_ctl & 0xff00) >> 8;
 }
 
+unsigned int get_actual_pstate(void)
+{
+       uint64_t perf_status;
+
+       if (read_msr_safe(MSR_IA32_PERF_STATUS, &perf_status))
+               return 0;
+       return (perf_status & 0xff00) >> 8;
+}
+
 void set_cstate(unsigned int cstate)
 {
        /* No real need to lock for an assignment.  Any core can set this, and other