diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-04-28 14:31:10 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-05-20 09:01:15 +0200 |
commit | 577293f0a959b5368c073d51f3404c57b3680d14 (patch) | |
tree | b7a65ec24fa9c01c721f7e0e5283636d1bf35b01 | |
parent | score: Remove unused SMP_MESSAGE_TEST (diff) | |
download | rtems-577293f0a959b5368c073d51f3404c57b3680d14.tar.bz2 |
score: Add _SMP_Synchronize()
-rw-r--r-- | cpukit/include/rtems/score/smpimpl.h | 8 | ||||
-rw-r--r-- | cpukit/score/src/smpmulticastaction.c | 10 | ||||
-rw-r--r-- | testsuites/smptests/smpipi01/init.c | 7 |
3 files changed, 22 insertions, 3 deletions
diff --git a/cpukit/include/rtems/score/smpimpl.h b/cpukit/include/rtems/score/smpimpl.h index c0fe7a03e2..e52a82cf25 100644 --- a/cpukit/include/rtems/score/smpimpl.h +++ b/cpukit/include/rtems/score/smpimpl.h @@ -261,6 +261,14 @@ void _SMP_Othercast_action( void *arg ); +/** + * @brief Ensures that all store operations issued by the current processor + * before the call this function are visible to all other online processors. + * + * Simply calls _SMP_Othercast_action() with an empty multicast action. + */ +void _SMP_Synchronize( void ); + #endif /* defined( RTEMS_SMP ) */ /** diff --git a/cpukit/score/src/smpmulticastaction.c b/cpukit/score/src/smpmulticastaction.c index b5d21a4b56..232b3142fd 100644 --- a/cpukit/score/src/smpmulticastaction.c +++ b/cpukit/score/src/smpmulticastaction.c @@ -211,3 +211,13 @@ void _SMP_Othercast_action( _Processor_mask_Clear( &targets, _SMP_Get_current_processor() ); _SMP_Multicast_action( &targets, handler, arg ); } + +static void _SMP_Do_nothing_action( void *arg ) +{ + /* Do nothing */ +} + +void _SMP_Synchronize( void ) +{ + _SMP_Othercast_action( _SMP_Do_nothing_action, NULL ); +} diff --git a/testsuites/smptests/smpipi01/init.c b/testsuites/smptests/smpipi01/init.c index 18d96dafaf..3cc7a13e2d 100644 --- a/testsuites/smptests/smpipi01/init.c +++ b/testsuites/smptests/smpipi01/init.c @@ -18,7 +18,6 @@ #include <rtems/score/smpimpl.h> #include <rtems/score/smpbarrier.h> -#include <rtems/counter.h> #include <rtems.h> #include <stdio.h> @@ -195,10 +194,12 @@ static void test_send_message_flood( } for (cpu_index = 0; cpu_index < cpu_count; ++cpu_index) { + Per_CPU_Control *cpu_self; uint32_t i; - /* Wait 1us so that all outstanding messages have been processed */ - rtems_counter_delay_nanoseconds(1000000); + cpu_self = _Thread_Dispatch_disable(); + _SMP_Synchronize(); + _Thread_Dispatch_enable(cpu_self); for (i = 0; i < cpu_count; ++i) { if (i != cpu_index) { |