intel_pstate: set BYT MSR with wrmsrl_on_cpu()
authorJoe Konno <joe.konno@intel.com>
Tue, 12 May 2015 14:59:42 +0000 (07:59 -0700)
committerSasha Levin <sasha.levin@oracle.com>
Sat, 4 Jul 2015 03:02:15 +0000 (23:02 -0400)
[ Upstream commit 0dd23f94251f49da99a6cbfb22418b2d757d77d6 ]

Commit 007bea098b86 (intel_pstate: Add setting voltage value for
baytrail P states.) introduced byt_set_pstate() with the assumption that
it would always be run by the CPU whose MSR is to be written by it.  It
turns out, however, that is not always the case in practice, so modify
byt_set_pstate() to enforce the MSR write done by it to always happen on
the right CPU.

Fixes: 007bea098b86 (intel_pstate: Add setting voltage value for baytrail P states.)
Signed-off-by: Joe Konno <joe.konno@intel.com>
Acked-by: Kristen Carlson Accardi <kristen@linux.intel.com>
Cc: 3.14+ <stable@vger.kernel.org> # 3.14+
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
drivers/cpufreq/intel_pstate.c

index 27bb6d3877ed6cc64ea1fc5bde5c1094a6ab34b0..d0d21363c63fc1ea4cec99730d7308a3e1cf0e22 100644 (file)
@@ -443,7 +443,7 @@ static void byt_set_pstate(struct cpudata *cpudata, int pstate)
 
        val |= vid;
 
-       wrmsrl(MSR_IA32_PERF_CTL, val);
+       wrmsrl_on_cpu(cpudata->cpu, MSR_IA32_PERF_CTL, val);
 }
 
 #define BYT_BCLK_FREQS 5