From 8d109c7e87a30a181156890bd5d19542f3b3a24d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20L=C3=B3pez?= Date: Wed, 9 Sep 2026 18:23:10 +0200 Subject: [PATCH] include: sbi: add thread safety analysis macros MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add macros to properly guard clang's thread safety analysis attributes keeping compatibility with GCC, on top of making things more readable. Clang < 19 does not support guarded_by() [0], so do not define the macros in that case. [0] https://github.com/llvm/llvm-project/pull/94216 Signed-off-by: Carlos López Reviewed-by: Anup Patel Link: https://lore.kernel.org/r/20260909162322.29778-3-carlos.lopezr4096@gmail.com Signed-off-by: Anup Patel --- include/sbi/sbi_visibility.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/include/sbi/sbi_visibility.h b/include/sbi/sbi_visibility.h index f900c445..993561ef 100644 --- a/include/sbi/sbi_visibility.h +++ b/include/sbi/sbi_visibility.h @@ -15,4 +15,21 @@ #pragma GCC visibility push(hidden) #endif +/* Thread Safety Analysis (TSA) annotations for use with clang -Wthread-safety */ +#if defined(__clang__) && __clang_major__ >= 19 +#define TSA_ATTR(x) __attribute__((x)) +#else +#define TSA_ATTR(x) +#endif + +#define CAPABILITY(x) TSA_ATTR(capability(x)) +#define GUARDED_BY(x) TSA_ATTR(guarded_by(x)) +#define PT_GUARDED_BY(x) TSA_ATTR(pt_guarded_by(x)) +#define ACQUIRE(...) TSA_ATTR(acquire_capability(__VA_ARGS__)) +#define RELEASE(...) TSA_ATTR(release_capability(__VA_ARGS__)) +#define MUST_HOLD(...) TSA_ATTR(requires_capability(__VA_ARGS__)) +#define MUST_NOT_HOLD(...) TSA_ATTR(locks_excluded(__VA_ARGS__)) +#define TRY_ACQUIRE(b, ...) TSA_ATTR(try_acquire_capability(b, __VA_ARGS__)) +#define NO_THREAD_SAFETY_ANALYSIS TSA_ATTR(no_thread_safety_analysis) + #endif