Commit 57caf4ec authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

cpufreq: intel_pstate: Avoid division by 0 in min_perf_pct_min()

Commit c5a2ee7d (cpufreq: intel_pstate: Active mode P-state
limits rework) incorrectly assumed that pstate.turbo_pstate would
always be nonzero for CPU0 in min_perf_pct_min() if
cpufreq_register_driver() had succeeded which may not be the case
in virtualized environments.

If that assumption doesn't hold, it leads to an early crash on boot
in intel_pstate_register_driver(), so add a sanity check to
min_perf_pct_min() to prevent the crash from happening.

Fixes: c5a2ee7d (cpufreq: intel_pstate: Active mode P-state limits rework)
Reported-and-tested-by: default avatarJongman Heo <jongman.heo@samsung.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 33fc30b4
...@@ -571,9 +571,10 @@ static inline void update_turbo_state(void) ...@@ -571,9 +571,10 @@ static inline void update_turbo_state(void)
static int min_perf_pct_min(void) static int min_perf_pct_min(void)
{ {
struct cpudata *cpu = all_cpu_data[0]; struct cpudata *cpu = all_cpu_data[0];
int turbo_pstate = cpu->pstate.turbo_pstate;
return DIV_ROUND_UP(cpu->pstate.min_pstate * 100, return turbo_pstate ?
cpu->pstate.turbo_pstate); DIV_ROUND_UP(cpu->pstate.min_pstate * 100, turbo_pstate) : 0;
} }
static s16 intel_pstate_get_epb(struct cpudata *cpu_data) static s16 intel_pstate_get_epb(struct cpudata *cpu_data)
......
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