Mesa (main): venus: fix vn_instance_wait_roundtrip when seqno wraps

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Dec 2 23:28:33 UTC 2021


Module: Mesa
Branch: main
Commit: bfa245e0c1b4022f9ea75fee76657b87ae86588b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=bfa245e0c1b4022f9ea75fee76657b87ae86588b

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Thu Dec  2 15:01:09 2021 -0800

venus: fix vn_instance_wait_roundtrip when seqno wraps

Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14026>

---

 src/virtio/vulkan/vn_instance.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/virtio/vulkan/vn_instance.c b/src/virtio/vulkan/vn_instance.c
index 025433bf975..910f7ded115 100644
--- a/src/virtio/vulkan/vn_instance.c
+++ b/src/virtio/vulkan/vn_instance.c
@@ -319,6 +319,13 @@ vn_instance_submit_roundtrip(struct vn_instance *instance,
    return result;
 }
 
+static bool
+roundtrip_seqno_ge(uint32_t a, uint32_t b)
+{
+   /* a >= b, but deal with wrapping as well */
+   return (a - b) <= INT32_MAX;
+}
+
 void
 vn_instance_wait_roundtrip(struct vn_instance *instance,
                            uint32_t roundtrip_seqno)
@@ -328,7 +335,7 @@ vn_instance_wait_roundtrip(struct vn_instance *instance,
    uint32_t iter = 0;
    do {
       const uint32_t cur = atomic_load_explicit(ptr, memory_order_acquire);
-      if (cur >= roundtrip_seqno || roundtrip_seqno - cur >= INT32_MAX)
+      if (roundtrip_seqno_ge(cur, roundtrip_seqno))
          break;
       vn_relax(&iter, "roundtrip");
    } while (true);



More information about the mesa-commit mailing list