diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-29 15:33:26 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-30 07:57:44 +0200 |
commit | 029877282edb8aa7a2095702742ce95c8246729e (patch) | |
tree | b1fbd380bac4071d05712957f9d03c6cc7521299 /cpukit/rtems | |
parent | score: Fix thread lock on SMP configurations (diff) | |
download | rtems-029877282edb8aa7a2095702742ce95c8246729e.tar.bz2 |
score: Avoid atomic fences for thread wait flags
The use of atomic fences is brittle and may break due to changes in
different areas which is hard to manage.
Diffstat (limited to 'cpukit/rtems')
-rw-r--r-- | cpukit/rtems/src/eventseize.c | 8 | ||||
-rw-r--r-- | cpukit/rtems/src/eventsurrender.c | 5 | ||||
-rw-r--r-- | cpukit/rtems/src/ratemonperiod.c | 2 | ||||
-rw-r--r-- | cpukit/rtems/src/ratemontimeout.c | 2 |
4 files changed, 4 insertions, 13 deletions
diff --git a/cpukit/rtems/src/eventseize.c b/cpukit/rtems/src/eventseize.c index c91d308438..7f5903df89 100644 --- a/cpukit/rtems/src/eventseize.c +++ b/cpukit/rtems/src/eventseize.c @@ -91,13 +91,7 @@ rtems_status_code _Event_Seize( _Thread_Set_state( executing, block_state ); - /* - * See _Event_Surrender() and _Thread_Timeout(), corresponding atomic - * variable is Thread_Control::Wait::flags. - */ - _Atomic_Fence( ATOMIC_ORDER_ACQUIRE ); - - success = _Thread_Wait_flags_try_change( + success = _Thread_Wait_flags_try_change_acquire( executing, intend_to_block, wait_class | THREAD_WAIT_STATE_BLOCKED diff --git a/cpukit/rtems/src/eventsurrender.c b/cpukit/rtems/src/eventsurrender.c index 576670b0b7..a9bef5916c 100644 --- a/cpukit/rtems/src/eventsurrender.c +++ b/cpukit/rtems/src/eventsurrender.c @@ -91,11 +91,8 @@ rtems_status_code _Event_Surrender( _Event_Satisfy( the_thread, event, pending_events, seized_events ); - /* See _Event_Seize() */ - _Atomic_Fence( ATOMIC_ORDER_RELEASE ); - ready_again = wait_class | THREAD_WAIT_STATE_READY_AGAIN; - success = _Thread_Wait_flags_try_change_critical( + success = _Thread_Wait_flags_try_change_release( the_thread, wait_class | THREAD_WAIT_STATE_INTEND_TO_BLOCK, ready_again diff --git a/cpukit/rtems/src/ratemonperiod.c b/cpukit/rtems/src/ratemonperiod.c index 771f9c15ab..303fe174e5 100644 --- a/cpukit/rtems/src/ratemonperiod.c +++ b/cpukit/rtems/src/ratemonperiod.c @@ -221,7 +221,7 @@ static rtems_status_code _Rate_monotonic_Block_while_active( _Thread_Set_state( executing, STATES_WAITING_FOR_PERIOD ); - success = _Thread_Wait_flags_try_change( + success = _Thread_Wait_flags_try_change_acquire( executing, RATE_MONOTONIC_INTEND_TO_BLOCK, RATE_MONOTONIC_BLOCKED diff --git a/cpukit/rtems/src/ratemontimeout.c b/cpukit/rtems/src/ratemontimeout.c index 78c78e2a7f..bd38153b82 100644 --- a/cpukit/rtems/src/ratemontimeout.c +++ b/cpukit/rtems/src/ratemontimeout.c @@ -43,7 +43,7 @@ void _Rate_monotonic_Timeout( Watchdog_Control *the_watchdog ) owner->Wait.return_argument = NULL; - success = _Thread_Wait_flags_try_change_critical( + success = _Thread_Wait_flags_try_change_release( owner, RATE_MONOTONIC_INTEND_TO_BLOCK, RATE_MONOTONIC_READY_AGAIN |