Commit f69ffc5d authored by Prarit Bhargava's avatar Prarit Bhargava Committed by Shuah Khan (Samsung OSG)

cpupower: Fix coredump on VMWare

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: default avatarPrarit Bhargava <prarit@redhat.com>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Stafford Horne <shorne@gmail.com>
Signed-off-by: default avatarShuah Khan (Samsung OSG) <shuah@kernel.org>
parent 8c22e2f6
...@@ -200,6 +200,8 @@ static int get_boost_mode(unsigned int cpu) ...@@ -200,6 +200,8 @@ static int get_boost_mode(unsigned int cpu)
printf(_(" Boost States: %d\n"), b_states); printf(_(" Boost States: %d\n"), b_states);
printf(_(" Total States: %d\n"), pstate_no); printf(_(" Total States: %d\n"), pstate_no);
for (i = 0; i < pstate_no; i++) { for (i = 0; i < pstate_no; i++) {
if (!pstates[i])
continue;
if (i < b_states) if (i < b_states)
printf(_(" Pstate-Pb%d: %luMHz (boost state)" printf(_(" Pstate-Pb%d: %luMHz (boost state)"
"\n"), i, pstates[i]); "\n"), i, pstates[i]);
......
...@@ -119,6 +119,11 @@ int decode_pstates(unsigned int cpu, unsigned int cpu_family, ...@@ -119,6 +119,11 @@ int decode_pstates(unsigned int cpu, unsigned int cpu_family,
} }
if (read_msr(cpu, MSR_AMD_PSTATE + i, &pstate.val)) if (read_msr(cpu, MSR_AMD_PSTATE + i, &pstate.val))
return -1; return -1;
if ((cpu_family == 0x17) && (!pstate.fam17h_bits.en))
continue;
else if (!pstate.bits.en)
continue;
pstates[i] = get_cof(cpu_family, pstate); pstates[i] = get_cof(cpu_family, pstate);
} }
*no = i; *no = i;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment