diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-17 14:31:32 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-19 09:59:41 +0100 |
commit | f8ff2a011cad523453cff8208b3dbd82aa66a110 (patch) | |
tree | 85779c8bf17337c0a734460cd50013d87afb7989 /cpukit | |
parent | score: Rename bsp_smp_initialize() (diff) | |
download | rtems-f8ff2a011cad523453cff8208b3dbd82aa66a110.tar.bz2 |
score: Delete bsp_smp_broadcast_interrupt()
Since the per-CPU SMP lock must be acquired and released to send the
message a single interrupt broadcast operations offers no benefits. If
synchronization is required, then a SMP barrier must be used anyway.
Diffstat (limited to 'cpukit')
-rw-r--r-- | cpukit/score/include/rtems/bspsmp.h | 14 | ||||
-rw-r--r-- | cpukit/score/src/smp.c | 12 |
2 files changed, 4 insertions, 22 deletions
diff --git a/cpukit/score/include/rtems/bspsmp.h b/cpukit/score/include/rtems/bspsmp.h index 9cdb6dc879..c7502ecbfb 100644 --- a/cpukit/score/include/rtems/bspsmp.h +++ b/cpukit/score/include/rtems/bspsmp.h @@ -52,20 +52,6 @@ extern "C" { #ifndef ASM /** - * @brief Generate an interprocessor broadcast interrupt. - * - * This method is invoked when RTEMS wants to let all of the other - * CPUs know that it has sent them message. CPUs not including - * the originating CPU should receive the interrupt. - - * - * @note On CPUs without the capability to generate a broadcast - * to all other CPUs interrupt, this can be implemented by - * a loop of sending interrupts to specific CPUs. - */ -void bsp_smp_broadcast_interrupt(void); - -/** * @brief Performs high-level initialization of a secondary processor and runs * the application threads. * diff --git a/cpukit/score/src/smp.c b/cpukit/score/src/smp.c index 612c6e9044..f3aa25f011 100644 --- a/cpukit/score/src/smp.c +++ b/cpukit/score/src/smp.c @@ -19,6 +19,7 @@ #endif #include <rtems/bspsmp.h> +#include <rtems/score/assert.h> #include <rtems/score/threaddispatch.h> #include <rtems/score/threadimpl.h> #include <rtems/score/smp.h> @@ -102,18 +103,13 @@ void _SMP_Broadcast_message( uint32_t message ) uint32_t ncpus = _SMP_Get_processor_count(); uint32_t cpu; + _Assert_Thread_dispatching_repressed(); + for ( cpu = 0 ; cpu < ncpus ; ++cpu ) { if ( cpu != self ) { - Per_CPU_Control *per_cpu = _Per_CPU_Get_by_index( cpu ); - ISR_Level level; - - _Per_CPU_ISR_disable_and_acquire( per_cpu, level ); - per_cpu->message |= message; - _Per_CPU_Release_and_ISR_enable( per_cpu, level ); + _SMP_Send_message( cpu, message ); } } - - bsp_smp_broadcast_interrupt(); } void _SMP_Request_other_cores_to_perform_first_context_switch( void ) |