[rtems commit] Using the generic atomic ops to implement UP mode atomic for all architectures . SMP atomic port will be later.
Ralf Corsepius
ralf.corsepius at rtems.org
Wed May 1 15:19:09 UTC 2013
On 05/01/2013 05:00 PM, Joel Sherrill wrote:
> On 5/1/2013 9:44 AM, Ralf Corsepius 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?
>>
>> The #ifdef __cplusplus as well as the #if !defined(RTEMS_SMP)
>> should be completely superflous. If not, they'd indicate bugs elsewhere.
> AFAIK The !defined(RTEMS_SMP) just says use the generic uniprocessor
> implementation when not SMP. What's the specific issue?
The code includes
<rtems/score/genericatomicops.h>
twice. Once unconditionally and once conditionally.
This is redundant.
>
> And I also don't see what the issue is with the C++ check.
The c++ guard is entirely superfluous in this case, because the file
does not define any symbol.
> A quick
> grep of score shows 122 files or 333 .h files have the C++ guard.
> Do you have a rationale for when one should be present or not?
The guards are required when files defines/declares C symbols. Files
which don't, don't have to.
Finally, files should set c++ guards in ways they are self-contained.
The construct above guards an included file, which means this guard is
either redundant (in case the other file is self-guarded) or the
included file isn't self-guarded (which would mean the include file is
poorly implemented == broken).
Ralf
More information about the devel
mailing list