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 | |
parent | score: Introduce thread state lock (diff) | |
download | rtems-105b4e6fa5005ce41c363711dec49851d4aef66f.tar.bz2 |
rtems: Use thread state lock for signals
Diffstat (limited to 'cpukit/rtems/include')
-rw-r--r-- | cpukit/rtems/include/rtems/rtems/asr.h | 3 | ||||
-rw-r--r-- | cpukit/rtems/include/rtems/rtems/asrimpl.h | 61 |
2 files changed, 8 insertions, 56 deletions
diff --git a/cpukit/rtems/include/rtems/rtems/asr.h b/cpukit/rtems/include/rtems/rtems/asr.h index 4563750919..edd5e2fe62 100644 --- a/cpukit/rtems/include/rtems/rtems/asr.h +++ b/cpukit/rtems/include/rtems/rtems/asr.h @@ -22,7 +22,6 @@ #ifndef _RTEMS_RTEMS_ASR_H #define _RTEMS_RTEMS_ASR_H -#include <rtems/score/isrlock.h> #include <rtems/rtems/modes.h> #ifdef __cplusplus @@ -75,8 +74,6 @@ typedef struct { rtems_signal_set signals_pending; /** This field indicates if nest level of signals being processed */ uint32_t nest_level; - /** Lock to protect this structure */ - ISR_LOCK_MEMBER( Lock ) } ASR_Information; /* 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; } |