From 1ef8e4a8e93a848e2a68f37e029039300f1c936b Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 27 Apr 2016 22:07:56 +0200 Subject: score: Avoid Giant lock for set time of day Update #2555. Update #2630. --- cpukit/rtems/src/clockset.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'cpukit/rtems/src/clockset.c') diff --git a/cpukit/rtems/src/clockset.c b/cpukit/rtems/src/clockset.c index 8d065b4011..f0300cc76a 100644 --- a/cpukit/rtems/src/clockset.c +++ b/cpukit/rtems/src/clockset.c @@ -19,7 +19,6 @@ #endif #include -#include #include #include @@ -32,15 +31,19 @@ rtems_status_code rtems_clock_set( if ( _TOD_Validate( tod ) ) { Timestamp_Control tod_as_timestamp; - uint32_t seconds = _TOD_To_seconds( tod ); - uint32_t nanoseconds = tod->ticks - * rtems_configuration_get_nanoseconds_per_tick(); + uint32_t seconds; + uint32_t nanoseconds; + ISR_lock_Context lock_context; + seconds = _TOD_To_seconds( tod ); + nanoseconds = tod->ticks + * rtems_configuration_get_nanoseconds_per_tick(); _Timestamp_Set( &tod_as_timestamp, seconds, nanoseconds ); - _Thread_Disable_dispatch(); - _TOD_Set( &tod_as_timestamp ); - _Thread_Enable_dispatch(); + _TOD_Lock(); + _TOD_Acquire( &lock_context ); + _TOD_Set( &tod_as_timestamp, &lock_context ); + _TOD_Unlock(); return RTEMS_SUCCESSFUL; } -- cgit v1.2.3