diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-10 06:47:19 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-12 13:24:40 +0200 |
commit | 105b4e6fa5005ce41c363711dec49851d4aef66f (patch) | |
tree | 23ded5915c1438a5a5c6285ab2db16d1abe480d5 /cpukit/rtems/include/rtems/rtems/asrimpl.h | |
parent | score: Introduce thread state lock (diff) | |
download | rtems-105b4e6fa5005ce41c363711dec49851d4aef66f.tar.bz2 |
rtems: Use thread state lock for signals
Diffstat (limited to '')
-rw-r--r-- | cpukit/rtems/include/rtems/rtems/asrimpl.h | 61 |
1 files changed, 8 insertions, 53 deletions
diff --git a/cpukit/rtems/include/rtems/rtems/asrimpl.h b/cpukit/rtems/include/rtems/rtems/asrimpl.h index 892c58c595..141c34d4bb 100644 --- a/cpukit/rtems/include/rtems/rtems/asrimpl.h +++ b/cpukit/rtems/include/rtems/rtems/asrimpl.h @@ -19,6 +19,8 @@ #include <rtems/rtems/asr.h> +#include <string.h> + #ifdef __cplusplus extern "C" { #endif @@ -40,48 +42,7 @@ RTEMS_INLINE_ROUTINE void _ASR_Initialize ( ASR_Information *asr ) { - asr->is_enabled = false; - asr->handler = NULL; - asr->mode_set = RTEMS_DEFAULT_MODES; - asr->signals_posted = 0; - asr->signals_pending = 0; - asr->nest_level = 0; -} - -RTEMS_INLINE_ROUTINE void _ASR_Create( ASR_Information *asr ) -{ - _ISR_lock_Initialize( &asr->Lock, "ASR" ); - RTEMS_STATIC_ASSERT( RTEMS_DEFAULT_MODES == 0, _ASR_Create_mode_set ); -} - -RTEMS_INLINE_ROUTINE void _ASR_Destroy( ASR_Information *asr ) -{ - _ISR_lock_Destroy( &asr->Lock ); -} - -RTEMS_INLINE_ROUTINE void _ASR_Acquire_critical( - ASR_Information *asr, - ISR_lock_Context *lock_context -) -{ - _ISR_lock_Acquire( &asr->Lock, lock_context ); -} - -RTEMS_INLINE_ROUTINE void _ASR_Acquire( - ASR_Information *asr, - ISR_lock_Context *lock_context -) -{ - _ISR_lock_ISR_disable( lock_context ); - _ASR_Acquire_critical( asr, lock_context ); -} - -RTEMS_INLINE_ROUTINE void _ASR_Release( - ASR_Information *asr, - ISR_lock_Context *lock_context -) -{ - _ISR_lock_Release_and_ISR_enable( &asr->Lock, lock_context ); + memset(asr, 0, sizeof(*asr)); } /** @@ -100,13 +61,10 @@ RTEMS_INLINE_ROUTINE bool _ASR_Is_null_handler ( RTEMS_INLINE_ROUTINE rtems_signal_set _ASR_Swap_signals( ASR_Information *asr ) { rtems_signal_set new_signals_posted; - ISR_lock_Context lock_context; - _ASR_Acquire( asr, &lock_context ); - new_signals_posted = asr->signals_pending; - asr->signals_pending = asr->signals_posted; - asr->signals_posted = new_signals_posted; - _ASR_Release( asr, &lock_context ); + new_signals_posted = asr->signals_pending; + asr->signals_pending = asr->signals_posted; + asr->signals_posted = new_signals_posted; return new_signals_posted; } @@ -124,12 +82,9 @@ RTEMS_INLINE_ROUTINE rtems_signal_set _ASR_Get_posted_signals( ) { rtems_signal_set signal_set; - ISR_lock_Context lock_context; - _ASR_Acquire( asr, &lock_context ); - signal_set = asr->signals_posted; - asr->signals_posted = 0; - _ASR_Release( asr, &lock_context ); + signal_set = asr->signals_posted; + asr->signals_posted = 0; return signal_set; } |