summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/clockset.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-04-27 22:07:56 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-05-02 07:46:16 +0200
commit1ef8e4a8e93a848e2a68f37e029039300f1c936b (patch)
tree1a592f827f25a7803f4c70520efd8ce514a523e6 /cpukit/rtems/src/clockset.c
parentscore: Streamline set time of day functions (diff)
downloadrtems-1ef8e4a8e93a848e2a68f37e029039300f1c936b.tar.bz2
score: Avoid Giant lock for set time of day
Update #2555. Update #2630.
Diffstat (limited to 'cpukit/rtems/src/clockset.c')
-rw-r--r--cpukit/rtems/src/clockset.c17
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;
}