1657a98f3SDavid Marchand /* SPDX-License-Identifier: BSD-3-Clause 2657a98f3SDavid Marchand * Copyright(c) 2022 Red Hat, Inc. 3657a98f3SDavid Marchand */ 4657a98f3SDavid Marchand 5657a98f3SDavid Marchand #ifndef RTE_LOCK_ANNOTATIONS_H 6657a98f3SDavid Marchand #define RTE_LOCK_ANNOTATIONS_H 7657a98f3SDavid Marchand 8657a98f3SDavid Marchand #ifdef __cplusplus 9657a98f3SDavid Marchand extern "C" { 10657a98f3SDavid Marchand #endif 11657a98f3SDavid Marchand 12657a98f3SDavid Marchand #ifdef RTE_ANNOTATE_LOCKS 13657a98f3SDavid Marchand 14657a98f3SDavid Marchand #define __rte_lockable \ 15657a98f3SDavid Marchand __attribute__((lockable)) 16657a98f3SDavid Marchand 17657a98f3SDavid Marchand #define __rte_guarded_by(...) \ 18657a98f3SDavid Marchand __attribute__((guarded_by(__VA_ARGS__))) 19657a98f3SDavid Marchand #define __rte_guarded_var \ 20657a98f3SDavid Marchand __attribute__((guarded_var)) 21657a98f3SDavid Marchand 22657a98f3SDavid Marchand #define __rte_exclusive_locks_required(...) \ 23657a98f3SDavid Marchand __attribute__((exclusive_locks_required(__VA_ARGS__))) 24657a98f3SDavid Marchand #define __rte_exclusive_lock_function(...) \ 25657a98f3SDavid Marchand __attribute__((exclusive_lock_function(__VA_ARGS__))) 26657a98f3SDavid Marchand #define __rte_exclusive_trylock_function(ret, ...) \ 27657a98f3SDavid Marchand __attribute__((exclusive_trylock_function(ret, __VA_ARGS__))) 28657a98f3SDavid Marchand #define __rte_assert_exclusive_lock(...) \ 29657a98f3SDavid Marchand __attribute__((assert_exclusive_lock(__VA_ARGS__))) 30657a98f3SDavid Marchand 31657a98f3SDavid Marchand #define __rte_shared_locks_required(...) \ 32657a98f3SDavid Marchand __attribute__((shared_locks_required(__VA_ARGS__))) 33657a98f3SDavid Marchand #define __rte_shared_lock_function(...) \ 34657a98f3SDavid Marchand __attribute__((shared_lock_function(__VA_ARGS__))) 35657a98f3SDavid Marchand #define __rte_shared_trylock_function(ret, ...) \ 36657a98f3SDavid Marchand __attribute__((shared_trylock_function(ret, __VA_ARGS__))) 37657a98f3SDavid Marchand #define __rte_assert_shared_lock(...) \ 38657a98f3SDavid Marchand __attribute__((assert_shared_lock(__VA_ARGS__))) 39657a98f3SDavid Marchand 40657a98f3SDavid Marchand #define __rte_unlock_function(...) \ 41657a98f3SDavid Marchand __attribute__((unlock_function(__VA_ARGS__))) 42657a98f3SDavid Marchand 43*4dd146e5SArtemy Kovalyov #define __rte_locks_excluded(...) \ 44*4dd146e5SArtemy Kovalyov __attribute__((locks_excluded(__VA_ARGS__))) 45*4dd146e5SArtemy Kovalyov 46657a98f3SDavid Marchand #define __rte_no_thread_safety_analysis \ 47657a98f3SDavid Marchand __attribute__((no_thread_safety_analysis)) 48657a98f3SDavid Marchand 49657a98f3SDavid Marchand #else /* ! RTE_ANNOTATE_LOCKS */ 50657a98f3SDavid Marchand 51657a98f3SDavid Marchand #define __rte_lockable 52657a98f3SDavid Marchand 53657a98f3SDavid Marchand #define __rte_guarded_by(...) 54657a98f3SDavid Marchand #define __rte_guarded_var 55657a98f3SDavid Marchand 56657a98f3SDavid Marchand #define __rte_exclusive_locks_required(...) 57657a98f3SDavid Marchand #define __rte_exclusive_lock_function(...) 58657a98f3SDavid Marchand #define __rte_exclusive_trylock_function(...) 59657a98f3SDavid Marchand #define __rte_assert_exclusive_lock(...) 60657a98f3SDavid Marchand 61657a98f3SDavid Marchand #define __rte_shared_locks_required(...) 62657a98f3SDavid Marchand #define __rte_shared_lock_function(...) 63657a98f3SDavid Marchand #define __rte_shared_trylock_function(...) 64657a98f3SDavid Marchand #define __rte_assert_shared_lock(...) 65657a98f3SDavid Marchand 66657a98f3SDavid Marchand #define __rte_unlock_function(...) 67657a98f3SDavid Marchand 68*4dd146e5SArtemy Kovalyov #define __rte_locks_excluded(...) 69*4dd146e5SArtemy Kovalyov 70657a98f3SDavid Marchand #define __rte_no_thread_safety_analysis 71657a98f3SDavid Marchand 72657a98f3SDavid Marchand #endif /* RTE_ANNOTATE_LOCKS */ 73657a98f3SDavid Marchand 74657a98f3SDavid Marchand #ifdef __cplusplus 75657a98f3SDavid Marchand } 76657a98f3SDavid Marchand #endif 77657a98f3SDavid Marchand 78657a98f3SDavid Marchand #endif /* RTE_LOCK_ANNOTATIONS_H */ 79