drm/i915: Simplify flushing activity on the ring
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 27 Nov 2012 16:22:53 +0000 (16:22 +0000)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 29 Nov 2012 10:43:53 +0000 (11:43 +0100)
As we now always preallocate the seqno before writing to the ring, we
can trivially test if we have any pending activity on the ring by
inspecting the olr. This makes it then possible to flush operations that
are not normally associated with a request, like power-management.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem.c

index 3b9b250ceac44f3cf8d49d7a6eed758e79edb27f..e594435eec9dcb67e4306edec9a3082667ea41f5 100644 (file)
@@ -2485,13 +2485,9 @@ static int i915_ring_idle(struct intel_ring_buffer *ring)
        u32 seqno;
        int ret;
 
-       /* We need to add any requests required to flush the objects */
-       if (!list_empty(&ring->active_list)) {
-               seqno = list_entry(ring->active_list.prev,
-                                  struct drm_i915_gem_object,
-                                  ring_list)->last_read_seqno;
-
-               ret = i915_gem_check_olr(ring, seqno);
+       /* We need to add any requests required to flush the objects and ring */
+       if (ring->outstanding_lazy_request) {
+               ret = i915_add_request(ring, NULL, NULL);
                if (ret)
                        return ret;
        }