mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-09 19:10:12 +01:00
util: Use explicit relaxed reads for u_queue
These are no-op, but make clang thread sanitizer happy. Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8230>
This commit is contained in:
parent
f3a43e36e0
commit
65ef4a2e02
3 changed files with 8 additions and 4 deletions
|
|
@ -42,6 +42,7 @@
|
|||
/* The builtins with explicit memory model are available since GCC 4.7. */
|
||||
#define p_atomic_set(_v, _i) __atomic_store_n((_v), (_i), __ATOMIC_RELEASE)
|
||||
#define p_atomic_read(_v) __atomic_load_n((_v), __ATOMIC_ACQUIRE)
|
||||
#define p_atomic_read_relaxed(_v) __atomic_load_n((_v), __ATOMIC_RELAXED)
|
||||
#define p_atomic_dec_zero(v) (__atomic_sub_fetch((v), 1, __ATOMIC_ACQ_REL) == 0)
|
||||
#define p_atomic_inc(v) (void) __atomic_add_fetch((v), 1, __ATOMIC_ACQ_REL)
|
||||
#define p_atomic_dec(v) (void) __atomic_sub_fetch((v), 1, __ATOMIC_ACQ_REL)
|
||||
|
|
@ -56,6 +57,7 @@
|
|||
|
||||
#define p_atomic_set(_v, _i) (*(_v) = (_i))
|
||||
#define p_atomic_read(_v) (*(_v))
|
||||
#define p_atomic_read_relaxed(_v) (*(_v))
|
||||
#define p_atomic_dec_zero(v) (__sync_sub_and_fetch((v), 1) == 0)
|
||||
#define p_atomic_inc(v) (void) __sync_add_and_fetch((v), 1)
|
||||
#define p_atomic_dec(v) (void) __sync_sub_and_fetch((v), 1)
|
||||
|
|
@ -86,6 +88,7 @@
|
|||
|
||||
#define p_atomic_set(_v, _i) (*(_v) = (_i))
|
||||
#define p_atomic_read(_v) (*(_v))
|
||||
#define p_atomic_read_relaxed(_v) (*(_v))
|
||||
#define p_atomic_dec_zero(_v) (p_atomic_dec_return(_v) == 0)
|
||||
#define p_atomic_inc(_v) ((void) p_atomic_inc_return(_v))
|
||||
#define p_atomic_dec(_v) ((void) p_atomic_dec_return(_v))
|
||||
|
|
@ -123,6 +126,7 @@
|
|||
|
||||
#define p_atomic_set(_v, _i) (*(_v) = (_i))
|
||||
#define p_atomic_read(_v) (*(_v))
|
||||
#define p_atomic_read_relaxed(_v) (*(_v))
|
||||
|
||||
#define p_atomic_dec_zero(_v) \
|
||||
(p_atomic_dec_return(_v) == 0)
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ static bool
|
|||
do_futex_fence_wait(struct util_queue_fence *fence,
|
||||
bool timeout, int64_t abs_timeout)
|
||||
{
|
||||
uint32_t v = fence->val;
|
||||
uint32_t v = p_atomic_read_relaxed(&fence->val);
|
||||
struct timespec ts;
|
||||
ts.tv_sec = abs_timeout / (1000*1000*1000);
|
||||
ts.tv_nsec = abs_timeout % (1000*1000*1000);
|
||||
|
|
@ -130,7 +130,7 @@ do_futex_fence_wait(struct util_queue_fence *fence,
|
|||
return false;
|
||||
}
|
||||
|
||||
v = fence->val;
|
||||
v = p_atomic_read_relaxed(&fence->val);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ util_queue_fence_init(struct util_queue_fence *fence)
|
|||
static inline void
|
||||
util_queue_fence_destroy(struct util_queue_fence *fence)
|
||||
{
|
||||
assert(fence->val == 0);
|
||||
assert(p_atomic_read_relaxed(&fence->val) == 0);
|
||||
/* no-op */
|
||||
}
|
||||
|
||||
|
|
@ -113,7 +113,7 @@ util_queue_fence_reset(struct util_queue_fence *fence)
|
|||
static inline bool
|
||||
util_queue_fence_is_signalled(struct util_queue_fence *fence)
|
||||
{
|
||||
return fence->val == 0;
|
||||
return p_atomic_read_relaxed(&fence->val) == 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue