diff mbox

[3/3] drm/i915: use async hpd_irq_event function on resume

Message ID 1400624735-4220-3-git-send-email-jbarnes@virtuousgeek.org (mailing list archive)
State New, archived
Headers show

Commit Message

Jesse Barnes May 20, 2014, 10:25 p.m. UTC
Gets the detect code (which may take awhile) out of the resume path,
speeding things up a bit.

Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
---
 drivers/gpu/drm/i915/i915_drv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Daniel Vetter May 21, 2014, 6:52 a.m. UTC | #1
On Tue, May 20, 2014 at 03:25:35PM -0700, Jesse Barnes wrote:
> Gets the detect code (which may take awhile) out of the resume path,
> speeding things up a bit.
> 
> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
> ---
>  drivers/gpu/drm/i915/i915_drv.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index 302495f..571f688 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -606,7 +606,7 @@ static int __i915_drm_thaw(struct drm_device *dev, bool restore_gtt_mappings)
>  		intel_hpd_init(dev);
>  		dev_priv->enable_hotplug_processing = true;
>  		/* Config may have changed between suspend and resume */
> -		drm_helper_hpd_irq_event(dev);
> +		async_schedule(drm_helper_hpd_irq_event_async, dev);

Does that really help all that much? I've thought the driver core
sychnronizes all the async workers again once resume is done. I'm better
to schedule this as a fully async work with e.g. a 1s delay, like we do
with the rps resume work.
-Daniel

>  	}
>  
>  	intel_opregion_init(dev);
> -- 
> 1.8.4.2
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
Jesse Barnes May 21, 2014, 3 p.m. UTC | #2
On Wed, 21 May 2014 08:52:34 +0200
Daniel Vetter <daniel@ffwll.ch> wrote:

> On Tue, May 20, 2014 at 03:25:35PM -0700, Jesse Barnes wrote:
> > Gets the detect code (which may take awhile) out of the resume path,
> > speeding things up a bit.
> > 
> > Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
> > ---
> >  drivers/gpu/drm/i915/i915_drv.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> > index 302495f..571f688 100644
> > --- a/drivers/gpu/drm/i915/i915_drv.c
> > +++ b/drivers/gpu/drm/i915/i915_drv.c
> > @@ -606,7 +606,7 @@ static int __i915_drm_thaw(struct drm_device *dev, bool restore_gtt_mappings)
> >  		intel_hpd_init(dev);
> >  		dev_priv->enable_hotplug_processing = true;
> >  		/* Config may have changed between suspend and resume */
> > -		drm_helper_hpd_irq_event(dev);
> > +		async_schedule(drm_helper_hpd_irq_event_async, dev);
> 
> Does that really help all that much? I've thought the driver core
> sychnronizes all the async workers again once resume is done. I'm better
> to schedule this as a fully async work with e.g. a 1s delay, like we do
> with the rps resume work.

That might be better, I'll check on the synchronization.  I thought
async_schedule was the new hotness we were supposed to use everywhere...
Daniel Vetter May 21, 2014, 3:12 p.m. UTC | #3
On Wed, May 21, 2014 at 08:00:22AM -0700, Jesse Barnes wrote:
> On Wed, 21 May 2014 08:52:34 +0200
> Daniel Vetter <daniel@ffwll.ch> wrote:
> 
> > On Tue, May 20, 2014 at 03:25:35PM -0700, Jesse Barnes wrote:
> > > Gets the detect code (which may take awhile) out of the resume path,
> > > speeding things up a bit.
> > > 
> > > Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
> > > ---
> > >  drivers/gpu/drm/i915/i915_drv.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > 
> > > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> > > index 302495f..571f688 100644
> > > --- a/drivers/gpu/drm/i915/i915_drv.c
> > > +++ b/drivers/gpu/drm/i915/i915_drv.c
> > > @@ -606,7 +606,7 @@ static int __i915_drm_thaw(struct drm_device *dev, bool restore_gtt_mappings)
> > >  		intel_hpd_init(dev);
> > >  		dev_priv->enable_hotplug_processing = true;
> > >  		/* Config may have changed between suspend and resume */
> > > -		drm_helper_hpd_irq_event(dev);
> > > +		async_schedule(drm_helper_hpd_irq_event_async, dev);
> > 
> > Does that really help all that much? I've thought the driver core
> > sychnronizes all the async workers again once resume is done. I'm better
> > to schedule this as a fully async work with e.g. a 1s delay, like we do
> > with the rps resume work.
> 
> That might be better, I'll check on the synchronization.  I thought
> async_schedule was the new hotness we were supposed to use everywhere...

It's pretty cool for easy async in driver load/resume since it autosyncs.
You can even create more async domains if you need finer-grained sync
points. But if we know that we can be more lenient than full sync before
our driver load/resume completes we need to use classical work queues.

But for stuff like doing paralle modeset restore async domains look like
the right thing.
-Daniel
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 302495f..571f688 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -606,7 +606,7 @@  static int __i915_drm_thaw(struct drm_device *dev, bool restore_gtt_mappings)
 		intel_hpd_init(dev);
 		dev_priv->enable_hotplug_processing = true;
 		/* Config may have changed between suspend and resume */
-		drm_helper_hpd_irq_event(dev);
+		async_schedule(drm_helper_hpd_irq_event_async, dev);
 	}
 
 	intel_opregion_init(dev);