drm/i915: Skip idling an idle engine
authorChris Wilson <chris@chris-wilson.co.uk>
Fri, 24 Jun 2016 13:55:52 +0000 (14:55 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 24 Jun 2016 14:02:16 +0000 (15:02 +0100)
During suspend (or module unload), if we have never accessed the engine
(i.e. userspace never submitted a batch to it), the engine is idle. Then
we attempt to idle the engine by forcing it to the default context,
which actually means we submit a render batch to setup the golden
context state and then wait for it to complete. We can skip this
entirely as we know the engine is idle.

v2: Drop incorrect comment.

References: https://bugs.freedesktop.org/show_bug.cgi?id=95634
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1466776558-21516-1-git-send-email-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_gem.c

index 6abd5e59037342ec4fc2fc2ececcb84b5beb4dd8..a0533ca089c5ee0fe223d7545143ce5b8ec2840a 100644 (file)
@@ -3677,8 +3677,10 @@ int i915_gpu_idle(struct drm_device *dev)
        struct intel_engine_cs *engine;
        int ret;
 
-       /* Flush everything onto the inactive list. */
        for_each_engine(engine, dev_priv) {
+               if (engine->last_context == NULL)
+                       continue;
+
                if (!i915.enable_execlists) {
                        struct drm_i915_gem_request *req;