summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/smpbarrierwait.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/src/smpbarrierwait.c')
-rw-r--r--cpukit/score/src/smpbarrierwait.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/cpukit/score/src/smpbarrierwait.c b/cpukit/score/src/smpbarrierwait.c
index 5a0de906e4..d06d819273 100644
--- a/cpukit/score/src/smpbarrierwait.c
+++ b/cpukit/score/src/smpbarrierwait.c
@@ -18,7 +18,7 @@
#include <rtems/score/smpbarrier.h>
-void _SMP_barrier_Wait(
+bool _SMP_barrier_Wait(
SMP_barrier_Control *control,
SMP_barrier_State *state,
unsigned int count
@@ -26,6 +26,7 @@ void _SMP_barrier_Wait(
{
unsigned int sense = ~state->sense;
unsigned int previous_value;
+ bool performed_release;
state->sense = sense;
@@ -38,11 +39,16 @@ void _SMP_barrier_Wait(
if ( previous_value + 1U == count ) {
_Atomic_Store_uint( &control->value, 0U, ATOMIC_ORDER_RELAXED );
_Atomic_Store_uint( &control->sense, sense, ATOMIC_ORDER_RELEASE );
+ performed_release = true;
} else {
while (
_Atomic_Load_uint( &control->sense, ATOMIC_ORDER_ACQUIRE ) != sense
) {
/* Wait */
}
+
+ performed_release = false;
}
+
+ return performed_release;
}