xref: /dpdk/lib/eal/include/rte_lock_annotations.h (revision 4dd146e597d81d900140a904e0b3b9feb1b0be6c)
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