diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-29 09:50:47 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-06-29 09:50:47 +0200 |
commit | 9bb3ce3918261c5392abbe4b65902e5d4b6dff07 (patch) | |
tree | a0ce25f5619672f3afd222cfe79460e88858d2da /c | |
parent | arm/raspberrypi: resolve BSP warnings. (diff) | |
download | rtems-9bb3ce3918261c5392abbe4b65902e5d4b6dff07.tar.bz2 |
score: Fix SMP message handling
According to the C11 standard only atomic read-modify-write operations
guarantee that the last value written in modification order is read, see
"7.17.3 Order and consistency". Thus we must use a read-modify-write in
_SMP_Inter_processor_interrupt_handler() to make sure we read an
up-to-date message.
Diffstat (limited to 'c')
-rw-r--r-- | c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c | 1 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/qoriq/startup/bspsmp.c | 5 |
2 files changed, 0 insertions, 6 deletions
diff --git a/c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c b/c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c index 7e939ff162..a3a95f4ea2 100644 --- a/c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c +++ b/c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c @@ -62,7 +62,6 @@ void _CPU_SMP_Prepare_start_multitasking( void ) void _CPU_SMP_Send_interrupt( uint32_t target_processor_index ) { - _ARM_Data_memory_barrier(); arm_gic_irq_generate_software_irq( ARM_GIC_IRQ_SGI_0, ARM_GIC_IRQ_SOFTWARE_IRQ_TO_ALL_IN_LIST, diff --git a/c/src/lib/libbsp/powerpc/qoriq/startup/bspsmp.c b/c/src/lib/libbsp/powerpc/qoriq/startup/bspsmp.c index 844f2b66b5..7bc7ec3089 100644 --- a/c/src/lib/libbsp/powerpc/qoriq/startup/bspsmp.c +++ b/c/src/lib/libbsp/powerpc/qoriq/startup/bspsmp.c @@ -267,10 +267,5 @@ void _CPU_SMP_Prepare_start_multitasking(void) void _CPU_SMP_Send_interrupt(uint32_t target_processor_index) { -#ifdef __PPC_CPU_E6500__ - ppc_light_weight_synchronize(); -#else - ppc_synchronize_data(); -#endif qoriq.pic.ipidr [IPI_INDEX].reg = 1U << target_processor_index; } |