diff --git a/src/virtio/vulkan/vn_common.c b/src/virtio/vulkan/vn_common.c index aa67cd34500..5ae40176830 100644 --- a/src/virtio/vulkan/vn_common.c +++ b/src/virtio/vulkan/vn_common.c @@ -259,8 +259,10 @@ vn_relax(struct vn_relax_state *state) return; } + state->warn = false; if (unlikely(*iter % (1 << warn_order) == 0)) { struct vn_instance *instance = state->instance; + state->warn = true; vn_log(instance, "stuck in %s wait with iter at %d", state->reason_str, *iter); diff --git a/src/virtio/vulkan/vn_common.h b/src/virtio/vulkan/vn_common.h index 25e54faed28..92117977ab5 100644 --- a/src/virtio/vulkan/vn_common.h +++ b/src/virtio/vulkan/vn_common.h @@ -273,6 +273,7 @@ struct vn_relax_state { uint32_t iter; const struct vn_relax_profile profile; const char *reason_str; + bool warn; }; /* TLS ring @@ -430,6 +431,12 @@ vn_relax(struct vn_relax_state *state); void vn_relax_fini(struct vn_relax_state *state); +static inline bool +vn_relax_warn(struct vn_relax_state *state) +{ + return state->warn; +} + static_assert(sizeof(vn_object_id) >= sizeof(uintptr_t), ""); static inline VkResult