Use atomics for CMM_{LOAD,STORE}_SHARED with ThreadSanitizer

Upstream has removed the atomics implementation of CMM_LOAD_SHARED and
CMM_STORE_SHARED as these can be used also with non-stdatomics types.
As we only use the CMM api with stdatomics types, we can restore the
previous behaviour to prevent ThreadSanitizer warnings.
This commit is contained in:
Ondřej Surý 2025-11-26 17:10:37 +01:00
parent 1b127320b3
commit 539be61b68
No known key found for this signature in database
GPG key ID: 2820F37E873DEA41

View file

@ -141,3 +141,32 @@
#endif /* !defined(caa_container_of_check_null) */
/* clang-format on */
#ifdef __SANITIZE_THREAD__
/*
* Restore the behaviour removed in
* https://github.com/urcu/userspace-rcu/commit/5cd787d0f953182a23d340669b20b150fd50c18c
* as we only use CMM_LOAD_SHARED() and CMM_STORE_SHARED() with atomic types.
*/
#undef CMM_LOAD_SHARED
#define CMM_LOAD_SHARED(x) \
__atomic_load_n(cmm_cast_volatile(&(x)), __ATOMIC_RELAXED)
#undef _CMM_LOAD_SHARED
#define _CMM_LOAD_SHARED(x) CMM_LOAD_SHARED(x)
#undef CMM_STORE_SHARED
#define CMM_STORE_SHARED(x, v) \
__extension__({ \
__typeof__(v) _v = (v); \
__atomic_store_n(cmm_cast_volatile(&(x)), _v, \
__ATOMIC_RELAXED); \
_v; \
})
#undef _CMM_STORE_SHARED
#define _CMM_STORE_SHARED(x, v) CMM_STORE_SHARED(x, v)
#endif