drm/i915: Only add the lazy request if we end up waiting for it.
authorChris Wilson <chris@chris-wilson.co.uk>
Wed, 10 Nov 2010 20:40:02 +0000 (20:40 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Wed, 10 Nov 2010 20:41:16 +0000 (20:41 +0000)
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/intel_ringbuffer.h

index 7c91bf2bbdfdb2e42460092610cb63d81a0499c5..52f5c194c50f7dd2253aa2b45f5cd34b8d66ce83 100644 (file)
@@ -1664,9 +1664,7 @@ i915_gem_next_request_seqno(struct drm_device *dev,
                            struct intel_ring_buffer *ring)
 {
        drm_i915_private_t *dev_priv = dev->dev_private;
-
-       ring->outstanding_lazy_request = true;
-       return dev_priv->next_seqno;
+       return ring->outstanding_lazy_request = dev_priv->next_seqno;
 }
 
 static void
@@ -2072,7 +2070,7 @@ i915_do_wait_request(struct drm_device *dev, uint32_t seqno,
        if (atomic_read(&dev_priv->mm.wedged))
                return -EAGAIN;
 
-       if (ring->outstanding_lazy_request) {
+       if (seqno == ring->outstanding_lazy_request) {
                struct drm_i915_gem_request *request;
 
                request = kzalloc(sizeof(*request), GFP_KERNEL);
@@ -2087,7 +2085,6 @@ i915_do_wait_request(struct drm_device *dev, uint32_t seqno,
 
                seqno = request->seqno;
        }
-       BUG_ON(seqno == dev_priv->next_seqno);
 
        if (!i915_seqno_passed(ring->get_seqno(ring), seqno)) {
                if (HAS_PCH_SPLIT(dev))
@@ -3973,7 +3970,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
        i915_retire_commands(dev, ring);
 
        if (i915_add_request(dev, file, request, ring))
-               ring->outstanding_lazy_request = true;
+               i915_gem_next_request_seqno(dev, ring);
        else
                request = NULL;
 
index 68043f1a186e0c9792b85cb7af1f1a44824129af..d73145c790bd6a8433b2df3d5af63680e91f4bcf 100644 (file)
@@ -87,7 +87,7 @@ struct  intel_ring_buffer {
        /**
         * Do we have some not yet emitted requests outstanding?
         */
-       bool outstanding_lazy_request;
+       u32 outstanding_lazy_request;
 
        wait_queue_head_t irq_queue;
        drm_local_map_t map;