5 #ifndef _RTE_SPINLOCK_H_ 6 #define _RTE_SPINLOCK_H_ 22 #ifdef RTE_FORCE_INTRINSICS 25 #include <rte_lock_annotations.h> 31 typedef struct __rte_lockable {
38 #define RTE_SPINLOCK_INITIALIZER { 0 } 60 __rte_exclusive_lock_function(sl);
62 #ifdef RTE_FORCE_INTRINSICS 65 __rte_no_thread_safety_analysis
69 while (!__atomic_compare_exchange_n(&sl->
locked, &exp, 1, 0,
70 __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) {
86 __rte_unlock_function(sl);
88 #ifdef RTE_FORCE_INTRINSICS 91 __rte_no_thread_safety_analysis
93 __atomic_store_n(&sl->
locked, 0, __ATOMIC_RELEASE);
108 __rte_exclusive_trylock_function(1, sl);
110 #ifdef RTE_FORCE_INTRINSICS 113 __rte_no_thread_safety_analysis
116 return __atomic_compare_exchange_n(&sl->
locked, &exp, 1,
118 __ATOMIC_ACQUIRE, __ATOMIC_RELAXED);
132 return __atomic_load_n(&sl->
locked, __ATOMIC_ACQUIRE);
158 __rte_exclusive_lock_function(sl);
169 __rte_unlock_function(sl);
190 __rte_exclusive_trylock_function(1, sl);
204 #define RTE_SPINLOCK_RECURSIVE_INITIALIZER {RTE_SPINLOCK_INITIALIZER, -1, 0} 226 __rte_no_thread_safety_analysis
230 if (slr->user !=
id) {
243 __rte_no_thread_safety_analysis
245 if (--(slr->count) == 0) {
262 __rte_no_thread_safety_analysis
266 if (slr->user !=
id) {
static __rte_warn_unused_result int rte_spinlock_trylock_tm(rte_spinlock_t *sl) sl)
static void rte_spinlock_recursive_lock_tm(rte_spinlock_recursive_t *slr)
static void rte_spinlock_lock(rte_spinlock_t *sl)
static void rte_spinlock_recursive_unlock(rte_spinlock_recursive_t *slr) __rte_no_thread_safety_analysis
static __rte_warn_unused_result int rte_spinlock_recursive_trylock_tm(rte_spinlock_recursive_t *slr)
static void rte_spinlock_recursive_init(rte_spinlock_recursive_t *slr)
static void rte_spinlock_unlock(rte_spinlock_t *sl)
static void rte_spinlock_unlock_tm(rte_spinlock_t *sl)
static __rte_warn_unused_result int rte_spinlock_recursive_trylock(rte_spinlock_recursive_t *slr) __rte_no_thread_safety_analysis
static void rte_spinlock_init(rte_spinlock_t *sl)
static int rte_tm_supported(void)
static __rte_warn_unused_result int rte_spinlock_trylock(rte_spinlock_t *sl) sl)
static void rte_spinlock_recursive_unlock_tm(rte_spinlock_recursive_t *slr)
static int rte_spinlock_is_locked(rte_spinlock_t *sl)
static void rte_spinlock_recursive_lock(rte_spinlock_recursive_t *slr) __rte_no_thread_safety_analysis
static __rte_always_inline void rte_wait_until_equal_32(volatile uint32_t *addr, uint32_t expected, int memorder)
static void rte_spinlock_lock_tm(rte_spinlock_t *sl)
static int rte_gettid(void)
#define __rte_warn_unused_result