[rtems commit] Using the generic atomic ops to implement UP mode atomic for all architectures . SMP atomic port will be later.

Gedare Bloom gedare at rtems.org
Wed May 1 15:07:13 UTC 2013


On Wed, May 1, 2013 at 11:03 AM, Gedare Bloom <gedare at rtems.org> wrote:
> On Wed, May 1, 2013 at 10:44 AM, Ralf Corsepius
> <ralf.corsepius at rtems.org> wrote:
>> On 05/01/2013 04:23 PM, Gedare Bloom wrote:
>>>
>>> Module:    rtems
>>> Branch:    master
>>> Commit:    9b605b28b497f398682a8ffd673f6860340957f8
>>> Changeset:
>>> http://git.rtems.org/rtems/commit/?id=9b605b28b497f398682a8ffd673f6860340957f8
>>>
>>> Author:    WeiY <wei.a.yang at gmail.com>
>>> Date:      Wed Apr 24 00:34:16 2013 +0800
>>>
>>> Using the generic atomic ops to implement UP mode atomic for all
>>> architectures. SMP atomic port will be later.
>>
>>
>>> +++ b/cpukit/score/cpu/arm/rtems/score/cpuatomic.h
>>> @@ -0,0 +1,40 @@
>>> +/**
>>> + * @file  rtems/score/cpuatomic.h
>>> + *
>>> + * This include file implements the atomic operations for arm and defines
>>> + * atomic data types which are used by the atomic operations API file.
>>> This
>>> + * file should use fixed name cpuatomic.h and should be included in
>>> atomic
>>> + * operations API file atomic.h. If the architecture works at the UP mode
>>> it
>>> + * will use a generic atomic ops using disable/enable-IRQ simulated. If
>>> the
>>> + * the architecture works at SMP mode, most of the parts of
>>> implementations
>>> + * are imported from FreeBSD kernel.
>>> + */
>>> +
>>> +#ifndef _RTEMS_SCORE_ATOMIC_CPU_H
>>> +#define _RTEMS_SCORE_ATOMIC_CPU_H
>>> +
>>> +#include <rtems/score/genericcpuatomic.h>
>>> +
>>> +#ifdef __cplusplus
>>> +extern "C" {
>>> +#endif
>>> +
>>> +/**
>>> + * @defgroup RTEMS atomic implementation
>>> + *
>>> + */
>>> +
>>> +/**@{*/
>>> +
>>> +#if !defined(RTEMS_SMP)
>>> +#include <rtems/score/genericatomicops.h>
>>> +#else
>>> +#endif
>>> +
>>> +#ifdef __cplusplus
>>> +}
>>> +#endif
>>> +
>>> +/**@}*/
>>> +#endif
>>> +/*  end of include file */
>>
>>
>> Would somebody please explain the code above?
>>
> This file splits the code for the atomic operations into two cases,
> uniprocessor and SMP. The uniprocessor (UP) generic framework disables
> and enables interrupts around the operation and can be used by any
> CPU. In SMP mode, the CPU should define the atomic operations. For the
> ARM and many other RTEMS targets, SMP mode is not supported so we do
> nothing here. In the future, the #else branch would include the atomic
> operations that are available for SMP.
>
>> The #ifdef __cplusplus as well as the #if !defined(RTEMS_SMP)
>> should be completely superflous. If not, they'd indicate bugs elsewhere.
>>
> The C++ guard is commonly used in score headers. I don't think anyone
> has codified when it can be removed. It does seem this file does not
> need it.
>
If we add the SMP mode atomic operations for this CPU directly in this
file, then it will need the C++ guard in place to prevent mangling the
function names.

> The SMP mode should be left as a placeholder for when SMP support is
> added. Perhaps a #warning or even #error should be added there to
> indicate there is a problem.
>
>> Ralf
>>
>>
>>
>>
>>
>> _______________________________________________
>> rtems-devel mailing list
>> rtems-devel at rtems.org
>> http://www.rtems.org/mailman/listinfo/rtems-devel



More information about the devel mailing list