提交 4b28a1f3 编写于 作者: P Paulo Zanoni 提交者: Daniel Vetter

drm/i915: fix infinite loop at gen6_update_ring_freq

If I boot my Broadwell machine to X on a system with Mesa Gallium
llvmpipe instead of i965, then kill X and try to run pm_pc8.c, when we
disable PC8 and call gen6_update_ring_freq(), we will get stuck on an
infinite loop because the frequencies are zero and the variables are
unsigned. This happens because we never ran any batch, so we did not
enable RC6, so the variables are zero. If I run gem_exec_nop before
running pm_pc8, everything works as expected because gem_exec_nop
makes RC6 be enabled.

This commit should prevent the infinite loop, which IMHO is already a
good reason to be merged, but it is not the proper fix to the "RC6 is
not being enabled" problem.
Signed-off-by: NPaulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
上级 9926ada1
...@@ -3487,7 +3487,8 @@ void gen6_update_ring_freq(struct drm_device *dev) ...@@ -3487,7 +3487,8 @@ void gen6_update_ring_freq(struct drm_device *dev)
* to use for memory access. We do this by specifying the IA frequency * to use for memory access. We do this by specifying the IA frequency
* the PCU should use as a reference to determine the ring frequency. * the PCU should use as a reference to determine the ring frequency.
*/ */
for (gpu_freq = dev_priv->rps.max_freq_softlimit; gpu_freq >= dev_priv->rps.min_freq_softlimit; for (gpu_freq = dev_priv->rps.max_freq_softlimit;
gpu_freq >= dev_priv->rps.min_freq_softlimit && gpu_freq != 0;
gpu_freq--) { gpu_freq--) {
int diff = dev_priv->rps.max_freq_softlimit - gpu_freq; int diff = dev_priv->rps.max_freq_softlimit - gpu_freq;
unsigned int ia_freq = 0, ring_freq = 0; unsigned int ia_freq = 0, ring_freq = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册