mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-11-09 08:37:58 +08:00
score: Fix SMP lock implementation
See also: https://nahratzah.wordpress.com/2012/10/12/a-trivial-fair-spinlock/ http://concurrencyfreaks.blogspot.de/2014/05/relaxed-atomics-optimizations-for.html
This commit is contained in:
1 parent
5fca9ef5a2
commit
da06fe948c
3 files changed
+9
-1
No files matched your search
@@ -50,6 +50,8 @@ typedef CPU_atomic_Order Atomic_Order;
|
||||
|
||||
#define ATOMIC_ORDER_RELEASE CPU_ATOMIC_ORDER_RELEASE
|
||||
|
||||
#define ATOMIC_ORDER_ACQ_REL CPU_ATOMIC_ORDER_ACQ_REL
|
||||
|
||||
#define ATOMIC_ORDER_SEQ_CST CPU_ATOMIC_ORDER_SEQ_CST
|
||||
|
||||
#define ATOMIC_INITIALIZER_UINT( value ) CPU_ATOMIC_INITIALIZER_UINT( value )
|
||||
|
||||
@@ -56,6 +56,8 @@ typedef std::memory_order CPU_atomic_Order;
|
||||
|
||||
#define CPU_ATOMIC_ORDER_RELEASE std::memory_order_release
|
||||
|
||||
#define CPU_ATOMIC_ORDER_ACQ_REL std::memory_order_acq_rel
|
||||
|
||||
#define CPU_ATOMIC_ORDER_SEQ_CST std::memory_order_seq_cst
|
||||
|
||||
#define CPU_ATOMIC_INITIALIZER_UINT( value ) ATOMIC_VAR_INIT( value )
|
||||
@@ -85,6 +87,8 @@ typedef memory_order CPU_atomic_Order;
|
||||
|
||||
#define CPU_ATOMIC_ORDER_RELEASE memory_order_release
|
||||
|
||||
#define CPU_ATOMIC_ORDER_ACQ_REL memory_order_acq_rel
|
||||
|
||||
#define CPU_ATOMIC_ORDER_SEQ_CST memory_order_seq_cst
|
||||
|
||||
#define CPU_ATOMIC_INITIALIZER_UINT( value ) ATOMIC_VAR_INIT( value )
|
||||
@@ -114,6 +118,8 @@ typedef int CPU_atomic_Order;
|
||||
|
||||
#define CPU_ATOMIC_ORDER_RELEASE 3
|
||||
|
||||
#define CPU_ATOMIC_ORDER_ACQ_REL 4
|
||||
|
||||
#define CPU_ATOMIC_ORDER_SEQ_CST 5
|
||||
|
||||
#define CPU_ATOMIC_INITIALIZER_UINT( value ) ( value )
|
||||
|
||||
@@ -280,7 +280,7 @@ static inline void _SMP_ticket_lock_Acquire(
|
||||
#endif
|
||||
|
||||
my_ticket =
|
||||
_Atomic_Fetch_add_uint( &lock->next_ticket, 1U, ATOMIC_ORDER_RELAXED );
|
||||
_Atomic_Fetch_add_uint( &lock->next_ticket, 1U, ATOMIC_ORDER_ACQ_REL );
|
||||
|
||||
#if defined( RTEMS_PROFILING )
|
||||
now_serving =
|
||||
|
||||
Reference in new issue
Block a user