[Intel-gfx] [PATCH 2/5] drm/i915: WARN() if we can't lookup_power_well()

Imre Deak imre.deak at intel.com
Thu Aug 23 13:41:47 UTC 2018


On Mon, Aug 20, 2018 at 04:31:36PM -0700, Paulo Zanoni wrote:
> None of the current lookup_power_well() callers are actually checking
> for NULL return values, they all just use the pointer right away.  The
> first idea was to replace these theoretical segfaults with a BUG()
> since this would at least make our code a little more explicit to the
> reader. It was suggested that just converting the BUG() to a WARN()
> and returning any power well would probably be better since it would
> still keep the system running while at the same time exposing the
> driver bug.
> 
> We can only hit this NULL/BUG()/WARN() condition if we try to lookup a
> power well that isn't defined on a given platform. If that ever
> happens, we have to fix our code, making it lookup the correct power
> well. Because of this, I don't think it's worth trying to implement
> error checking in every caller. Improving our CI system will be a
> better use of our time once a bug is found in the wild.
> 
> v2: Avoid the BUG() with a WARN() return a random PW (Michal).
> 
> Cc: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Cc: Imre Deak <imre.deak at intel.com>
> Signed-off-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
> ---
>  drivers/gpu/drm/i915/intel_runtime_pm.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
> index f75837e45144..f07ed70b839f 100644
> --- a/drivers/gpu/drm/i915/intel_runtime_pm.c
> +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
> @@ -1096,7 +1096,15 @@ lookup_power_well(struct drm_i915_private *dev_priv,
>  			return power_well;
>  	}
>  
> -	return NULL;
> +	/*
> +	 * It's not feasible to add error checking code to the callers since
> +	 * this condition really shouldn't happen and it doesn't even make sense
> +	 * to abort things like display initialization sequences. Just return
> +	 * the first power well and hope the WARN gets reported so we can fix
> +	 * our driver.
> +	 */

The first power well is the always-on power well on all platforms, which
has nop get/put handlers so comes handy to use it here, making side effects
less likely. The change makes sense:

Reviewed-by: Imre Deak <imre.deak at intel.com>

> +	WARN(1, "Power well %d not defined for this platform\n", power_well_id);
> +	return &power_domains->power_wells[0];
>  }
>  
>  #define BITS_SET(val, bits) (((val) & (bits)) == (bits))
> -- 
> 2.14.4
> 


More information about the Intel-gfx mailing list