This turns the black magic into brown magic.

It's arguable whether or not this is more readable than the existing
code. It does add a nice assertion, fewer lines of actual code, and some
nice comments - as well as sticking to semantics now used in the
ringbuffer code.

Cc: Daniel Vetter <[email protected]>
Signed-off-by: Ben Widawsky <[email protected]>
---
 drivers/gpu/drm/i915/intel_ringbuffer.h |   26 ++++++++++++--------------
 1 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h 
b/drivers/gpu/drm/i915/intel_ringbuffer.h
index 61790c8..e4516e4 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -119,23 +119,21 @@ intel_ring_flag(struct intel_ring_buffer *ring)
        return (1 << ring->id);
 }
 
+/* intel_ring_sync_index - return the index (0-n, where n is total rings - 1)
+ * of the ring we're synchronizing to.
+ *
+ * @signaller - ring which last updated the mailbox
+ * @waiter - ring waiting on seqno in mailbox
+ */
 static inline u32
-intel_ring_sync_index(struct intel_ring_buffer *ring,
-                     struct intel_ring_buffer *other)
+intel_ring_sync_index(struct intel_ring_buffer *signaller,
+                     struct intel_ring_buffer *waiter)
 {
-       int idx;
-
-       /*
-        * cs -> 0 = vcs, 1 = bcs
-        * vcs -> 0 = bcs, 1 = cs,
-        * bcs -> 0 = cs, 1 = vcs.
+       /* This bit of magic is based on the fact that there are 3 rings, and
+        * the value of bit 17 is a unique way to identify the mailbox
         */
-
-       idx = (other->id - ring->id) - 1;
-       if (idx < 0)
-               idx += I915_NUM_RINGS;
-
-       return idx;
+       BUG_ON(signaller->semaphore_register[waiter->id] >> 17 > 1);
+       return (signaller->semaphore_register[waiter->id] >> 17);
 }
 
 static inline u32
-- 
1.7.6.1

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

Reply via email to