[Intel-gfx] [PATCH] Detect wraparound using next-seqno rather than waiter->olr
Chris Wilson
chris at chris-wilson.co.uk
Thu Dec 6 15:12:30 CET 2012
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
More information about the Intel-gfx
mailing list