Sun Jul 26 15:30:36 2015 UTC ()
Avoid NULL dev_priv->vlv_pctx-> deref in a WARN check on Lenovo B50-30,
add an additional check for the NULL dev_priv->vlv_pctx.
System now boots (though does not recognise any of the USB(3) ports)
pullup#7


(abs)
diff -r1.6 -r1.7 src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c

cvs diff -r1.6 -r1.7 src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c (expand / switch to unified diff)

--- src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c 2015/02/25 13:06:13 1.6
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_pm.c 2015/07/26 15:30:36 1.7
@@ -3615,26 +3615,28 @@ static int valleyview_rps_rpe_freq(struc @@ -3615,26 +3615,28 @@ static int valleyview_rps_rpe_freq(struc
3615 return rpe; 3615 return rpe;
3616} 3616}
3617 3617
3618int valleyview_rps_min_freq(struct drm_i915_private *dev_priv) 3618int valleyview_rps_min_freq(struct drm_i915_private *dev_priv)
3619{ 3619{
3620 return vlv_punit_read(dev_priv, PUNIT_REG_GPU_LFM) & 0xff; 3620 return vlv_punit_read(dev_priv, PUNIT_REG_GPU_LFM) & 0xff;
3621} 3621}
3622 3622
3623/* Check that the pctx buffer wasn't move under us. */ 3623/* Check that the pctx buffer wasn't move under us. */
3624static void valleyview_check_pctx(struct drm_i915_private *dev_priv) 3624static void valleyview_check_pctx(struct drm_i915_private *dev_priv)
3625{ 3625{
3626 unsigned long pctx_addr = I915_READ(VLV_PCBR) & ~4095; 3626 unsigned long pctx_addr = I915_READ(VLV_PCBR) & ~4095;
3627 3627
 3628 if (WARN_ON(!dev_priv->vlv_pctx))
 3629 return;
3628 WARN_ON(pctx_addr != dev_priv->mm.stolen_base + 3630 WARN_ON(pctx_addr != dev_priv->mm.stolen_base +
3629 dev_priv->vlv_pctx->stolen->start); 3631 dev_priv->vlv_pctx->stolen->start);
3630} 3632}
3631 3633
3632static void valleyview_setup_pctx(struct drm_device *dev) 3634static void valleyview_setup_pctx(struct drm_device *dev)
3633{ 3635{
3634 struct drm_i915_private *dev_priv = dev->dev_private; 3636 struct drm_i915_private *dev_priv = dev->dev_private;
3635 struct drm_i915_gem_object *pctx; 3637 struct drm_i915_gem_object *pctx;
3636 unsigned long pctx_paddr; 3638 unsigned long pctx_paddr;
3637 u32 pcbr; 3639 u32 pcbr;
3638 int pctx_size = 24*1024; 3640 int pctx_size = 24*1024;
3639 3641
3640 WARN_ON(!mutex_is_locked(&dev->struct_mutex)); 3642 WARN_ON(!mutex_is_locked(&dev->struct_mutex));