summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2015-05-07 14:02:46 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-05-19 12:00:48 +0200
commita816f08478e2fe395062a8114c0654d0624906ae (patch)
tree081603c63ed5648cef1fc5b12b7404fdd7bedb09 /cpukit/rtems
parentscore: Remove Giant lock in rtems_clock_tick() (diff)
downloadrtems-a816f08478e2fe395062a8114c0654d0624906ae.tar.bz2
score: Fine grained locking for MrsP
Update #2273.
Diffstat (limited to 'cpukit/rtems')
-rw-r--r--cpukit/rtems/src/semobtain.c7
-rw-r--r--cpukit/rtems/src/semrelease.c10
2 files changed, 7 insertions, 10 deletions
diff --git a/cpukit/rtems/src/semobtain.c b/cpukit/rtems/src/semobtain.c
index 1ebc98bdb7..bda39fa80e 100644
--- a/cpukit/rtems/src/semobtain.c
+++ b/cpukit/rtems/src/semobtain.c
@@ -59,16 +59,13 @@ rtems_status_code rtems_semaphore_obtain(
if ( _Attributes_Is_multiprocessor_resource_sharing( attribute_set ) ) {
MRSP_Status mrsp_status;
- _Thread_Disable_dispatch();
- _ISR_lock_ISR_enable( &lock_context );
mrsp_status = _MRSP_Obtain(
&the_semaphore->Core_control.mrsp,
executing,
wait,
- timeout
+ timeout,
+ &lock_context
);
- _Thread_Enable_dispatch();
- _Objects_Put_for_get_isr_disable( &the_semaphore->Object );
return _Semaphore_Translate_MRSP_status_code( mrsp_status );
} else
#endif
diff --git a/cpukit/rtems/src/semrelease.c b/cpukit/rtems/src/semrelease.c
index 7e4b98e7de..5d41b6cfae 100644
--- a/cpukit/rtems/src/semrelease.c
+++ b/cpukit/rtems/src/semrelease.c
@@ -75,13 +75,13 @@ rtems_status_code rtems_semaphore_release(
attribute_set = the_semaphore->attribute_set;
#if defined(RTEMS_SMP)
if ( _Attributes_Is_multiprocessor_resource_sharing( attribute_set ) ) {
- _Thread_Disable_dispatch();
- _ISR_lock_ISR_enable( &lock_context );
- MRSP_Status mrsp_status = _MRSP_Release(
+ MRSP_Status mrsp_status;
+
+ mrsp_status = _MRSP_Release(
&the_semaphore->Core_control.mrsp,
- _Thread_Get_executing()
+ _Thread_Executing,
+ &lock_context
);
- _Thread_Enable_dispatch();
return _Semaphore_Translate_MRSP_status_code( mrsp_status );
} else
#endif