提交 57caf4ec 编写于 作者: R 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: NJongman Heo <jongman.heo@samsung.com>
Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
上级 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% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册