From fb07f730c1dd400b6d2f79a5393ff5e3cdded73e Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 13 Apr 2020 19:29:35 +0200 Subject: score: Return status in _TOD_Set() Update #3949. --- cpukit/include/rtems/score/todimpl.h | 25 ++++++++++-------------- cpukit/posix/src/clocksettime.c | 9 +++++---- cpukit/rtems/src/clockset.c | 9 +++------ cpukit/score/src/coretodhookrun.c | 30 ++++++++++++++++------------- cpukit/score/src/coretodset.c | 12 ++++++------ testsuites/sptests/spclock_todhook01/init.c | 14 +++++++------- 6 files changed, 48 insertions(+), 51 deletions(-) diff --git a/cpukit/include/rtems/score/todimpl.h b/cpukit/include/rtems/score/todimpl.h index 5287c976f5..b54d9a950c 100644 --- a/cpukit/include/rtems/score/todimpl.h +++ b/cpukit/include/rtems/score/todimpl.h @@ -18,6 +18,7 @@ #ifndef _RTEMS_SCORE_TODIMPL_H #define _RTEMS_SCORE_TODIMPL_H +#include #include #include #include @@ -197,10 +198,10 @@ static inline void _TOD_Release( ISR_lock_Context *lock_context ) * _TOD_Acquire(). The caller must be the owner of the TOD lock. This * function will release the TOD lock. * - * @retval true on success - * @retval false on failure + * @retval STATUS_SUCCESSFUL Successful operation. + * @retval other Some error occurred. */ -bool _TOD_Set( +Status_Control _TOD_Set( const struct timespec *tod, ISR_lock_Context *lock_context ); @@ -370,7 +371,7 @@ typedef struct TOD_Hook { Chain_Node Node; /** This is the TOD action hook that is invoked. */ - bool (*handler)(TOD_Action, const struct timespec *); + Status_Control ( *handler )( TOD_Action, const struct timespec * ); } TOD_Hook; /** @@ -384,9 +385,6 @@ extern Chain_Control _TOD_Hooks; * This method is used to add a hook to the TOD action set. * * @brief hook is the action hook to register. - * - * @retval true if the hook is added. - * @retval false if the hook cannot be added. */ void _TOD_Hook_Register( TOD_Hook *hook @@ -398,9 +396,6 @@ void _TOD_Hook_Register( * This method is used to remove a hook from the TOD action set. * * @brief hook is the action hook to unregister. - * - * @retval true if the hook is unregister. - * @retval false if the hook cannot be unregister. */ void _TOD_Hook_Unregister( TOD_Hook *hook @@ -411,13 +406,13 @@ void _TOD_Hook_Unregister( * * This method is used to invoke the set of TOD action hooks. * - * @brief action is the action which triggered this run. - * @brief tod is the current tod + * @brief action The action which triggered this run. + * @brief tod The current time of day. * - * @retval true if the hooks can be run. - * @retval false if the hook cannot be run. + * @retval STATUS_SUCCESSFUL Successful operation. + * @retval other Some error occurred. */ -bool _TOD_Hook_Run( +Status_Control _TOD_Hook_Run( TOD_Action action, const struct timespec *tod ); diff --git a/cpukit/posix/src/clocksettime.c b/cpukit/posix/src/clocksettime.c index bfae46feee..5bb6f2f14b 100644 --- a/cpukit/posix/src/clocksettime.c +++ b/cpukit/posix/src/clocksettime.c @@ -32,7 +32,7 @@ int clock_settime( const struct timespec *tp ) { - bool retval; + Status_Control status; if ( !tp ) rtems_set_errno_and_return_minus_one( EINVAL ); @@ -45,10 +45,11 @@ int clock_settime( _TOD_Lock(); _TOD_Acquire( &lock_context ); - retval = _TOD_Set( tp, &lock_context ); + status = _TOD_Set( tp, &lock_context ); _TOD_Unlock(); - if ( retval == false ) { - rtems_set_errno_and_return_minus_one( EPERM ); + + if ( status != STATUS_SUCCESSFUL ) { + rtems_set_errno_and_return_minus_one( STATUS_GET_POSIX( status ) ); } } #ifdef _POSIX_CPUTIME diff --git a/cpukit/rtems/src/clockset.c b/cpukit/rtems/src/clockset.c index a885fe1169..f60efb4c11 100644 --- a/cpukit/rtems/src/clockset.c +++ b/cpukit/rtems/src/clockset.c @@ -26,7 +26,7 @@ rtems_status_code rtems_clock_set( const rtems_time_of_day *tod ) { - bool retval; + Status_Control status; if ( !tod ) return RTEMS_INVALID_ADDRESS; @@ -41,13 +41,10 @@ rtems_status_code rtems_clock_set( _TOD_Lock(); _TOD_Acquire( &lock_context ); - retval = _TOD_Set( &tod_as_timespec, &lock_context ); + status = _TOD_Set( &tod_as_timespec, &lock_context ); _TOD_Unlock(); - if ( retval == true ) { - return RTEMS_SUCCESSFUL; - } - return RTEMS_IO_ERROR; + return STATUS_GET_CLASSIC( status ); } return RTEMS_INVALID_CLOCK; diff --git a/cpukit/score/src/coretodhookrun.c b/cpukit/score/src/coretodhookrun.c index ae9cf66dfc..c0acc6e5fb 100644 --- a/cpukit/score/src/coretodhookrun.c +++ b/cpukit/score/src/coretodhookrun.c @@ -42,31 +42,35 @@ #include #include -bool _TOD_Hook_Run( +Status_Control _TOD_Hook_Run( TOD_Action action, const struct timespec *tod ) { - Chain_Node *the_node; - bool retval = true; + const Chain_Node *the_node; + Status_Control status; + + status = STATUS_SUCCESSFUL; /* * This is assumed to be called only from _TOD_Set() which is supposed - * to be called only while holding the TOD lock. + * to be called only while holding the TOD lock. */ _Assert( _TOD_Is_owner() ); - for ( the_node = _Chain_First( &_TOD_Hooks ); - !_Chain_Is_tail( &_TOD_Hooks, the_node ) ; - the_node = the_node->next ) { - TOD_Hook *the_hook = (TOD_Hook *) the_node; - - retval = (the_hook->handler)( action, tod ); - if ( retval == false ) { + for ( + the_node = _Chain_Immutable_first( &_TOD_Hooks ); + !_Chain_Is_tail( &_TOD_Hooks, the_node ); + the_node = _Chain_Immutable_next( the_node ) + ) { + const TOD_Hook *the_hook; + + the_hook = (const TOD_Hook *) the_node; + status = ( *the_hook->handler )( action, tod ); + if ( status != STATUS_SUCCESSFUL ) { break; } } - return retval; + return status; } - diff --git a/cpukit/score/src/coretodset.c b/cpukit/score/src/coretodset.c index 94ecd0b322..ed840ece2b 100644 --- a/cpukit/score/src/coretodset.c +++ b/cpukit/score/src/coretodset.c @@ -22,7 +22,7 @@ #include #include -bool _TOD_Set( +Status_Control _TOD_Set( const struct timespec *tod, ISR_lock_Context *lock_context ) @@ -31,14 +31,14 @@ bool _TOD_Set( uint64_t tod_as_ticks; uint32_t cpu_max; uint32_t cpu_index; - bool retval; + Status_Control status; _Assert( _TOD_Is_owner() ); - retval = _TOD_Hook_Run( TOD_ACTION_SET_CLOCK, tod ); - if ( retval == false ) { + status = _TOD_Hook_Run( TOD_ACTION_SET_CLOCK, tod ); + if ( status != STATUS_SUCCESSFUL ) { _TOD_Release( lock_context ); - return false; + return status; } timespec2bintime( tod, &tod_as_bintime ); @@ -75,5 +75,5 @@ bool _TOD_Set( _TOD.is_set = true; - return true; + return STATUS_SUCCESSFUL; } diff --git a/testsuites/sptests/spclock_todhook01/init.c b/testsuites/sptests/spclock_todhook01/init.c index 26f0ff9b48..78c7bd552a 100644 --- a/testsuites/sptests/spclock_todhook01/init.c +++ b/testsuites/sptests/spclock_todhook01/init.c @@ -78,7 +78,7 @@ static struct timespec tod_set; static bool hook1_executed; static bool hook2_executed; -static bool tod_hook1( +static Status_Control tod_hook1( TOD_Action action, const struct timespec *tod ) @@ -90,10 +90,10 @@ static bool tod_hook1( hook1_executed = true; - return true; + return STATUS_SUCCESSFUL; } -static bool tod_hook2( +static Status_Control tod_hook2( TOD_Action action, const struct timespec *tod ) @@ -105,7 +105,7 @@ static bool tod_hook2( hook2_executed = true; - return true; + return STATUS_SUCCESSFUL; } /* @@ -219,7 +219,7 @@ static void do_positive_case(int i) static bool hook_error_executed; -static bool tod_hook_error( +static Status_Control tod_hook_error( TOD_Action action, const struct timespec *tod ) @@ -231,7 +231,7 @@ static bool tod_hook_error( hook_error_executed = true; - return false; + return STATUS_NOT_OWNER; } /* * Execute one negative test case. @@ -274,7 +274,7 @@ static void do_negative_case(bool use_posix) 0 ); status = rtems_clock_set( &time ); - rtems_test_assert( status == RTEMS_IO_ERROR ); + rtems_test_assert( status == RTEMS_NOT_OWNER_OF_RESOURCE ); } else { int rc; -- cgit v1.2.3