drm/i915: Don't skip request retirement if the active list is empty
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Thu, 28 May 2015 15:32:36 +0000 (18:32 +0300)
committerJani Nikula <jani.nikula@intel.com>
Mon, 15 Jun 2015 09:21:16 +0000 (12:21 +0300)
Apparently we can have requests even if though the active list is empty,
so do the request retirement regardless of whether there's anything
on the active list.

The way it happened here is that during suspend intel_ring_idle()
notices the olr hanging around and then proceeds to get rid of it by
adding a request. However since there was nothing on the active lists
i915_gem_retire_requests() didn't clean those up, and so the idle work
never runs, and we leave the GPU "busy" during suspend resulting in a
WARN later.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/i915_gem.c

index be35f0486202d6d5b36db6e6e74a2a3b0c73353a..c35e0352b77f631aa220d75aeffcf3db0ebd3ca4 100644 (file)
@@ -2813,9 +2813,6 @@ i915_gem_retire_requests_ring(struct intel_engine_cs *ring)
 {
        WARN_ON(i915_verify_lists(ring->dev));
 
-       if (list_empty(&ring->active_list))
-               return;
-
        /* Retire requests first as we use it above for the early return.
         * If we retire requests last, we may use a later seqno and so clear
         * the requests lists without clearing the active list, leading to