From 62c528e633758302f30aa714838b51613f03f9e7 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 20 May 2016 14:59:30 +0200 Subject: rtems: _Semaphore_Get_interrupt_disable() Use _Objects_Get_local() for _Semaphore_Get_interrupt_disable() to get rid of the location parameter. Move remote object handling to semaphore MPCI support. --- cpukit/rtems/src/semrelease.c | 111 ++++++++++++++++-------------------------- 1 file changed, 42 insertions(+), 69 deletions(-) (limited to 'cpukit/rtems/src/semrelease.c') diff --git a/cpukit/rtems/src/semrelease.c b/cpukit/rtems/src/semrelease.c index 762328c309..2ebf5c07c2 100644 --- a/cpukit/rtems/src/semrelease.c +++ b/cpukit/rtems/src/semrelease.c @@ -21,82 +21,55 @@ #include "config.h" #endif -#include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include +#include -rtems_status_code rtems_semaphore_release( - rtems_id id -) +rtems_status_code rtems_semaphore_release( rtems_id id ) { - Semaphore_Control *the_semaphore; - Objects_Locations location; - CORE_mutex_Status mutex_status; - CORE_semaphore_Status semaphore_status; - rtems_attribute attribute_set; - ISR_lock_Context lock_context; - - the_semaphore = _Semaphore_Get_interrupt_disable( - id, - &location, - &lock_context - ); - switch ( location ) { + Semaphore_Control *the_semaphore; + CORE_mutex_Status mutex_status; + CORE_semaphore_Status semaphore_status; + rtems_attribute attribute_set; + ISR_lock_Context lock_context; - case OBJECTS_LOCAL: - attribute_set = the_semaphore->attribute_set; -#if defined(RTEMS_SMP) - if ( _Attributes_Is_multiprocessor_resource_sharing( attribute_set ) ) { - MRSP_Status mrsp_status; - - mrsp_status = _MRSP_Surrender( - &the_semaphore->Core_control.mrsp, - _Thread_Executing, - &lock_context - ); - return _Semaphore_Translate_MRSP_status_code( mrsp_status ); - } else -#endif - if ( !_Attributes_Is_counting_semaphore( attribute_set ) ) { - mutex_status = _CORE_mutex_Surrender( - &the_semaphore->Core_control.mutex, - _Semaphore_Core_mutex_mp_support, - id, - &lock_context - ); - return _Semaphore_Translate_core_mutex_return_code( mutex_status ); - } else { - semaphore_status = _CORE_semaphore_Surrender( - &the_semaphore->Core_control.semaphore, - _Semaphore_Core_mutex_mp_support, - id, - &lock_context - ); - return - _Semaphore_Translate_core_semaphore_return_code( semaphore_status ); - } + the_semaphore = _Semaphore_Get_interrupt_disable( id, &lock_context ); + if ( the_semaphore == NULL ) { #if defined(RTEMS_MULTIPROCESSING) - case OBJECTS_REMOTE: - return _Semaphore_MP_Send_request_packet( - SEMAPHORE_MP_RELEASE_REQUEST, - id, - 0, /* Not used */ - MPCI_DEFAULT_TIMEOUT - ); + _Semaphore_MP_Release( id ); +#else + return RTEMS_INVALID_ID; #endif - - case OBJECTS_ERROR: - break; } - return RTEMS_INVALID_ID; + attribute_set = the_semaphore->attribute_set; +#if defined(RTEMS_SMP) + if ( _Attributes_Is_multiprocessor_resource_sharing( attribute_set ) ) { + MRSP_Status mrsp_status; + + mrsp_status = _MRSP_Surrender( + &the_semaphore->Core_control.mrsp, + _Thread_Executing, + &lock_context + ); + return _Semaphore_Translate_MRSP_status_code( mrsp_status ); + } else +#endif + if ( !_Attributes_Is_counting_semaphore( attribute_set ) ) { + mutex_status = _CORE_mutex_Surrender( + &the_semaphore->Core_control.mutex, + _Semaphore_Core_mutex_mp_support, + id, + &lock_context + ); + return _Semaphore_Translate_core_mutex_return_code( mutex_status ); + } else { + semaphore_status = _CORE_semaphore_Surrender( + &the_semaphore->Core_control.semaphore, + _Semaphore_Core_mutex_mp_support, + id, + &lock_context + ); + return _Semaphore_Translate_core_semaphore_return_code( semaphore_status ); + } } -- cgit v1.2.3