lkml.org 
[lkml]   [2018]   [Nov]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 036/141] cpupower: Fix coredump on VMWare
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Prarit Bhargava <prarit@redhat.com>

    [ Upstream commit f69ffc5d3db8f1f03fd6d1df5930f9a1fbd787b6 ]

    cpupower crashes on VMWare guests. The guests have the AMD PStateDef MSR
    (0xC0010064 + state number) set to zero. As a result fid and did are zero
    and the crash occurs because of a divide by zero (cof = fid/did). This
    can be prevented by checking the enable bit in the PStateDef MSR before
    calculating cof. By doing this the value of pstate[i] remains zero and
    the value can be tested before displaying the active Pstates.

    Check the enable bit in the PstateDef register for all supported families
    and only print out enabled Pstates.

    Signed-off-by: Prarit Bhargava <prarit@redhat.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Stafford Horne <shorne@gmail.com>
    Signed-off-by: Shuah Khan (Samsung OSG) <shuah@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    tools/power/cpupower/utils/cpufreq-info.c | 2 ++
    tools/power/cpupower/utils/helpers/amd.c | 5 +++++
    2 files changed, 7 insertions(+)

    --- a/tools/power/cpupower/utils/cpufreq-info.c
    +++ b/tools/power/cpupower/utils/cpufreq-info.c
    @@ -202,6 +202,8 @@ static int get_boost_mode(unsigned int c
    printf(_(" Boost States: %d\n"), b_states);
    printf(_(" Total States: %d\n"), pstate_no);
    for (i = 0; i < pstate_no; i++) {
    + if (!pstates[i])
    + continue;
    if (i < b_states)
    printf(_(" Pstate-Pb%d: %luMHz (boost state)"
    "\n"), i, pstates[i]);
    --- a/tools/power/cpupower/utils/helpers/amd.c
    +++ b/tools/power/cpupower/utils/helpers/amd.c
    @@ -103,6 +103,11 @@ int decode_pstates(unsigned int cpu, uns
    }
    if (read_msr(cpu, MSR_AMD_PSTATE + i, &pstate.val))
    return -1;
    + if ((cpu_family == 0x17) && (!pstate.fam17h_bits.en))
    + continue;
    + else if (!pstate.bits.en)
    + continue;
    +
    pstates[i] = get_cof(cpu_family, pstate);
    }
    *no = i;

    \
     
     \ /
      Last update: 2018-11-11 23:46    [W:6.444 / U:0.756 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site