As the olr may have been allocated long in advance for a much earlier
write to the ring, waiter->olr may genuinely be less than the semaphore
seqno. So use the global next_seqno for wraparound detection instead.
---
 drivers/gpu/drm/i915/intel_ringbuffer.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c 
b/drivers/gpu/drm/i915/intel_ringbuffer.c
index d5d5177..29f9e2c 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -595,6 +595,12 @@ gen6_add_request(struct intel_ring_buffer *ring)
        return 0;
 }
 
+static inline u32 i915_gem_next_seqno(struct drm_device *dev)
+{
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       return dev_priv->next_seqno;
+}
+
 /**
  * intel_ring_sync - sync the waiter to the signaller on seqno
  *
@@ -628,7 +634,7 @@ gen6_ring_sync(struct intel_ring_buffer *waiter,
        BUG_ON(!waiter->outstanding_lazy_request);
 
        /* If seqno wrap happened, omit the wait with no-ops */
-       if (likely(waiter->outstanding_lazy_request > seqno)) {
+       if (likely(i915_gem_next_seqno(waiter->dev) > seqno)) {
                intel_ring_emit(waiter,
                                dw1 |
                                signaller->semaphore_register[waiter->id]);
-- 
1.7.10.4

_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to