diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-04-27 22:07:56 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-02 07:46:16 +0200 |
commit | 1ef8e4a8e93a848e2a68f37e029039300f1c936b (patch) | |
tree | 1a592f827f25a7803f4c70520efd8ce514a523e6 /cpukit/rtems | |
parent | score: Streamline set time of day functions (diff) | |
download | rtems-1ef8e4a8e93a848e2a68f37e029039300f1c936b.tar.bz2 |
score: Avoid Giant lock for set time of day
Update #2555.
Update #2630.
Diffstat (limited to 'cpukit/rtems')
-rw-r--r-- | cpukit/rtems/src/clockset.c | 17 |
1 files changed, 10 insertions, 7 deletions
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 <rtems/rtems/clock.h> -#include <rtems/score/threaddispatch.h> #include <rtems/score/todimpl.h> #include <rtems/config.h> @@ -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; } |