[Intel-gfx] [PATCH 1/3] drm/i915: Kill intel_runtime_pm_disable()

Rafael J. Wysocki rjw at rjwysocki.net
Tue Nov 10 15:49:37 PST 2015


On Tuesday, November 10, 2015 09:20:56 AM Jesse Barnes wrote:
> On 11/06/2015 05:08 AM, ville.syrjala at linux.intel.com wrote:
> > From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > 
> > intel_runtime_pm_disable() takes an extra rpm reference which combined
> > with the one we leak from intel_display_set_init_power() leaves the
> > usage count at <original>+1 after the driver has been unloaded.
> > The original ref is dropped explicitly in intel_runtime_pm_enable().
> > So the next time we load the driver we can no longer do runtime PM ever.
> > 
> > This used to work, but
> > commit 292b990e86ab ("drm/i915: Update power domains on readout.")
> > broke things by not dropping the init power domain during fbdev
> > teardown. Based on the comment in intel_power_domains_fini(), the
> > way it used to to work wasn't intentional. As in we weren't supposed
> > to drop the init power during driver unload. And since we no longer
> > do, we now leak an extra rpm reference.
> > 
> > So fix things by throwing intel_runtime_pm_disable() to the bin, so
> > that the only leaked reference comes from the init power domain.
> > 
> > Cc: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
> > Cc: Daniel Stone <daniels at collabora.com>
> > Cc: Jesse Barnes <jbarnes at virtuousgeek.org>
> > Fixes: 292b990e86ab ("drm/i915: Update power domains on readout.")
> > Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_runtime_pm.c | 17 -----------------
> >  1 file changed, 17 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915/intel_runtime_pm.c
> > index 1017555..bdc9ed4 100644
> > --- a/drivers/gpu/drm/i915/intel_runtime_pm.c
> > +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c
> > @@ -1847,21 +1847,6 @@ int intel_power_domains_init(struct drm_i915_private *dev_priv)
> >  	return 0;
> >  }
> >  
> > -static void intel_runtime_pm_disable(struct drm_i915_private *dev_priv)
> > -{
> > -	struct drm_device *dev = dev_priv->dev;
> > -	struct device *device = &dev->pdev->dev;
> > -
> > -	if (!HAS_RUNTIME_PM(dev))
> > -		return;
> > -
> > -	if (!intel_enable_rc6(dev))
> > -		return;
> > -
> > -	/* Make sure we're not suspended first. */
> > -	pm_runtime_get_sync(device);
> > -}
> > -
> >  /**
> >   * intel_power_domains_fini - finalizes the power domain structures
> >   * @dev_priv: i915 device instance
> > @@ -1872,8 +1857,6 @@ static void intel_runtime_pm_disable(struct drm_i915_private *dev_priv)
> >   */
> >  void intel_power_domains_fini(struct drm_i915_private *dev_priv)
> >  {
> > -	intel_runtime_pm_disable(dev_priv);
> > -
> >  	/* The i915.ko module is still not prepared to be loaded when
> >  	 * the power well is not enabled, so just enable it in case
> >  	 * we're going to unload/reload. */
> > 
> 
> Yeah I guess this is fine.  Will we still disable RPM on unload?  What's
> the expected behavior here?  Cc'ing Rafael.

If that's a PCI device, you don't have to do anything with it.  In fact,
you aren't expected to do anything with it even.

Thanks,
Rafael



More information about the Intel-gfx mailing list