summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-02-17 14:31:32 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-02-19 09:59:41 +0100
commitf8ff2a011cad523453cff8208b3dbd82aa66a110 (patch)
tree85779c8bf17337c0a734460cd50013d87afb7989 /cpukit
parentscore: Rename bsp_smp_initialize() (diff)
downloadrtems-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.h14
-rw-r--r--cpukit/score/src/smp.c12
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 )