[GSOC] RPi BSP memory barrier
sebastian.huber at embedded-brains.de
Wed May 14 06:55:43 UTC 2014
On 2014-05-13 21:40, Andre Marques wrote:
> On 05/09/14 07:04, Sebastian Huber wrote:
>> On 2014-05-08 18:51, Andre Marques wrote:
>>> On 05/05/14 11:50, Sebastian Huber wrote:
>>>> On 2014-05-05 12:43, Andre Marques wrote:
>>>>> Any thoughts on this?
>>>> Why not use C11 atomic operations?
>>> Well, I didn't know they existed, thank you!
>>> Since I have not used them before, please check if I'm thinking this right.
>>> 1. Include rtems/score/atomic.h
>>> 2. Initialize variable with ATOMIC_INITIALIZER_* as per
>>> 3. Use _Atomic_Load_* to read the variable value and _Atomic_Store_* to set a
>>> new value to the variable
>>> 4. As for memory models I'm thinking in using ATOMIC_ORDER_ACQUIRE to load and
>>> ATOMIC_ORDER_RELEASE to store.
>> You can also use the _Atomic_Fence() in some situations. If you work with
>> devices, then the C11 atomic operations may be not sufficient.
>> In cpu.h we have on the ARM:
>> static inline void _ARM_Data_memory_barrier( void )
>> __asm__ volatile ( "dmb" : : : "memory" );
>> static inline void _ARM_Data_synchronization_barrier( void )
>> __asm__ volatile ( "dsb" : : : "memory" );
>> static inline void _ARM_Instruction_synchronization_barrier( void )
>> __asm__ volatile ( "isb" : : : "memory" );
> Yes this memory concern is related to multiple devices working at the same time.
For what kind of synchronization do you need these barriers?
> If I understood, I should use the C11 atomic operations to access the variables
> (representing a memory register), along with the arm memory barriers?
> Those cpu.h functions call the memory barrier instructions, but from the little
> I know about the arm1176 (armv6) used on the RPi it does not support the memory
> barrier instructions (dmb, dsb and isb), but instead relies on a coprocessor
> I naively tried to call the _ARM_Data_memory_barrier () on the Raspberry Pi BSP
> and it gave me
> Error: selected processor does not support ARM mode `dmb'
> I just called it, I did not made any other preparation or includes, so this may
> be my fault.
> This suggests (or confirms) that the inline assembly to implement those memory
> barriers are lacking (for the RPi BSP at least).
> Thanks for the help.
Maybe you can do something like in the attached patch.
Sebastian Huber, embedded brains GmbH
Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone : +49 89 189 47 41-16
Fax : +49 89 189 47 41-09
E-Mail : sebastian.huber at embedded-brains.de
PGP : Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 1384 bytes
Desc: not available
More information about the devel