This is not a read-write lock. The user field stores the thread ID, not the core ID.
The implementation is architecture-specific in some cases only. Reported-by: Stephen Hemminger <[email protected]> Signed-off-by: Thomas Monjalon <[email protected]> --- lib/eal/include/generic/rte_spinlock.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/eal/include/generic/rte_spinlock.h b/lib/eal/include/generic/rte_spinlock.h index 19c0e34f0a..d9f255f8c4 100644 --- a/lib/eal/include/generic/rte_spinlock.h +++ b/lib/eal/include/generic/rte_spinlock.h @@ -7,12 +7,16 @@ /** * @file + * DPDK spinlocks * - * RTE Spinlocks + * This is an API for spinlocks. + * This kind of lock simply waits in a loop + * repeatedly checking until the lock becomes available. * - * This file defines an API for read-write locks, which are implemented - * in an architecture-specific way. This kind of lock simply waits in - * a loop repeatedly checking until the lock becomes available. + * Some functions may have an architecture-specific implementation + * if RTE_FORCE_INTRINSICS is disabled. + * The hardware transactional memory (lock elision) functions have _tm suffix + * and are implemented in architecture-specific files. * * All locks must be initialised before use, and only initialised once. */ @@ -197,7 +201,7 @@ rte_spinlock_trylock_tm(rte_spinlock_t *sl) */ typedef struct { rte_spinlock_t sl; /**< the actual spinlock */ - int user; /**< core id using lock, -1 for unused */ + int user; /**< thread id using lock, -1 for unused */ int count; /**< count of time this lock has been called */ } rte_spinlock_recursive_t; -- 2.54.0

