• Wyes Karny's avatar
    cpufreq: amd-pstate: Fix invalid write to MSR_AMD_CPPC_REQ · 6e9d1212
    Wyes Karny authored
    `amd_pstate_set_epp` function uses `cppc_req_cached` and `epp` variable
    to update the MSR_AMD_CPPC_REQ register for AMD MSR systems. The recent
    commit 7cca9a98 ("cpufreq: amd-pstate: avoid uninitialized variable
    use") changed the sequence of updating cppc_req_cached and writing the
    MSR_AMD_CPPC_REQ. Therefore while switching from powersave to
    performance governor and vice-versa in active mode MSR_AMD_CPPC_REQ is
    set with the previous cached value. To fix this: first update the
    `cppc_req_cached` variable and then call `amd_pstate_set_epp` function.
    
     - Before commit 7cca9a98 ("cpufreq: amd-pstate: avoid uninitialized
       variable use"):
    
    With powersave governor:
    [    1.652743] amd_pstate_epp_init: writing to cppc_req_cached = 0x1eff
    [    1.652744] amd_pstate_set_epp: writing cppc_req_cached = 0x1eff
    [    1.652746] amd_pstate_set_epp: writing min_perf = 30, des_perf = 0, max_perf = 255, epp = 0
    
    Changing to performance governor:
    [  300.493842] amd_pstate_epp_init: writing to cppc_req_cached = 0xffff
    [  300.493846] amd_pstate_set_epp: writing cppc_req_cached = 0xffff
    [  300.493847] amd_pstate_set_epp: writing min_perf = 255, des_perf = 0, max_perf = 255, epp = 0
    
     - After commit 7cca9a98 ("cpufreq: amd-pstate: avoid uninitialized
       variable use"):
    
    With powersave governor:
    [    1.646037] amd_pstate_set_epp: writing cppc_req_cached = 0xffff
    [    1.646038] amd_pstate_set_epp: writing min_perf = 255, des_perf = 0, max_perf = 255, epp = 0
    [    1.646042] amd_pstate_epp_init: writing to cppc_req_cached = 0x1eff
    
    Changing to performance governor:
    [  687.117401] amd_pstate_set_epp: writing cppc_req_cached = 0x1eff
    [  687.117405] amd_pstate_set_epp: writing min_perf = 30, des_perf = 0, max_perf = 255, epp = 0
    [  687.117419] amd_pstate_epp_init: writing to cppc_req_cached = 0xffff
    
     - After this fix:
    
    With powersave governor:
    [    2.525717] amd_pstate_epp_init: writing to cppc_req_cached = 0x1eff
    [    2.525720] amd_pstate_set_epp: writing cppc_req_cached = 0x1eff
    [    2.525722] amd_pstate_set_epp: writing min_perf = 30, des_perf = 0, max_perf = 255, epp = 0
    
    Changing to performance governor:
    [ 3440.152468] amd_pstate_epp_init: writing to cppc_req_cached = 0xffff
    [ 3440.152473] amd_pstate_set_epp: writing cppc_req_cached = 0xffff
    [ 3440.152474] amd_pstate_set_epp: writing min_perf = 255, des_perf = 0, max_perf = 255, epp = 0
    
    Fixes: 7cca9a98 ("cpufreq: amd-pstate: avoid uninitialized variable use")
    Signed-off-by: default avatarWyes Karny <wyes.karny@amd.com>
    Acked-by: default avatarHuang Rui <ray.huang@amd.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    6e9d1212
amd-pstate.c 33.9 KB