On Tue, Jun 27, 2017 at 06:37:31PM +0100, Chris Wilson wrote: > i915_gem_suspend() is called from all of our finalization paths > (suspend, hibernate, unload). i915_gem_drain_freed_objects() adds an > arbitrary delay as it uses an rcu_barrier() to ensure that there are no > more freed objects in flight, and this delay causes a large amount of > variability in suspend timings. For S3 suspend, we do not need to free > pages as doing so does not impact at all upon the system in its > suspended state, unlike S4 hibernation where we do want the hibernation > image to be as small as possible. Therefore we can forgo waiting inside > i915_gem_suspend(), so long as we ensure that we do cleanup before > unload (see i915_gem_load_cleanup()) and prefer to reap our objects > prior to hibernation (see i915_gem_freeze()). > > Removing the rcu_barrier() from i915_gem_suspend() improves S3 latency > by about 30ms on Skylake (ymmv). > > Reported-by: David Weinehall <david.weinehall@xxxxxxxxxxxxxxx> > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: David Weinehall <david.weinehall@xxxxxxxxxxxxxxx> Tested-by: David Weinehall <david.weinehall@xxxxxxxxxxxxxxx> Reviewed-by: David Weinehall <david.weinehall@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_gem.c | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index 36d838677982..f38c84e485ab 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -4597,8 +4597,6 @@ int i915_gem_suspend(struct drm_i915_private *dev_priv) > while (flush_delayed_work(&dev_priv->gt.idle_work)) > ; > > - i915_gem_drain_freed_objects(dev_priv); > - > /* Assert that we sucessfully flushed all the work and > * reset the GPU back to its idle, low power state. > */ > -- > 2.13.1 > _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx