diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-02-17 09:05:53 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-02-20 15:18:49 +0100 |
commit | 74ca8b7517ac463b73daf7d6b4773a1987a6760b (patch) | |
tree | 1ff6e95951e529f009ac28aa04eaee7e5dc98e29 /cpukit/rtems/src/signalsend.c | |
parent | rtems: Remove unused ASR_Information::nest_level (diff) | |
download | rtems-74ca8b7517ac463b73daf7d6b4773a1987a6760b.tar.bz2 |
rtems: Move _Signal_Action_handler()
Move _Signal_Action_handler() and signal MP initialization to
rtems_signal_send(). The goal is to make _Signal_Action_handler() a
static function in a follow up patch.
Update #4244.
Diffstat (limited to 'cpukit/rtems/src/signalsend.c')
-rw-r--r-- | cpukit/rtems/src/signalsend.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/cpukit/rtems/src/signalsend.c b/cpukit/rtems/src/signalsend.c index efc3a9566a..fc8a66b6c6 100644 --- a/cpukit/rtems/src/signalsend.c +++ b/cpukit/rtems/src/signalsend.c @@ -26,6 +26,44 @@ #include <rtems/score/threaddispatch.h> #include <rtems/score/threadimpl.h> +#include <rtems/sysinit.h> + +void _Signal_Action_handler( + Thread_Control *executing, + Thread_Action *action, + ISR_lock_Context *lock_context +) +{ + RTEMS_API_Control *api; + ASR_Information *asr; + rtems_signal_set signal_set; + rtems_mode prev_mode; + + (void) action; + + /* + * Signal Processing + */ + + api = executing->API_Extensions[ THREAD_API_RTEMS ]; + asr = &api->Signal; + signal_set = _ASR_Get_posted_signals( asr ); + + if ( signal_set == 0 ) { + return; + } + + _Thread_State_release( executing, lock_context ); + + rtems_task_mode( asr->mode_set, RTEMS_ALL_MODE_MASKS, &prev_mode ); + + (*asr->handler)( signal_set ); + + rtems_task_mode( prev_mode, RTEMS_ALL_MODE_MASKS, &prev_mode ); + + _Thread_State_acquire( executing, lock_context ); +} + rtems_status_code rtems_signal_send( rtems_id id, rtems_signal_set signal_set @@ -79,3 +117,19 @@ rtems_status_code rtems_signal_send( return RTEMS_SUCCESSFUL; } + +#if defined(RTEMS_MULTIPROCESSING) +static void _Signal_MP_Initialize( void ) +{ + _MPCI_Register_packet_processor( + MP_PACKET_SIGNAL, + _Signal_MP_Process_packet + ); +} + +RTEMS_SYSINIT_ITEM( + _Signal_MP_Initialize, + RTEMS_SYSINIT_CLASSIC_SIGNAL_MP, + RTEMS_SYSINIT_ORDER_MIDDLE +); +#endif |