[ovs-dev] [PATCH dpdk-latest 1/1] sparse: Fix __ATOMIC_* redefinition errors

Ilya Maximets i.maximets at ovn.org
Wed Oct 21 12:31:54 UTC 2020


On 10/21/20 2:26 PM, Ilya Maximets wrote:
> On 10/21/20 2:17 PM, Stokes, Ian wrote:
>>> In sparse commit [1], __ATOMIC_* defines were introduced, which cause
>>> redefinition errors. Wrap OVS defines with #ifndef to fix it.
>>
>> Thanks for this Eli as well as the testing, was a bit confused myself as the community CI was passing yesterday initially with RC1, so good catch.
>>
>> One minor comment below.
>>>
>>> [1]
>>> https://git.kernel.org/pub/scm/devel/sparse/sparse.git/commit/?id=cf8f104749
>>> f5bca36852989297af8cc19ff24d5f
>>>
>>> Tested-at: https://travis-ci.org/github/elibritstein/OVS/builds/737660375
>>> Signed-off-by: Eli Britstein <elibr at nvidia.com>
>>> ---
>>>  include/sparse/rte_mbuf.h        | 8 ++++++++
>>>  include/sparse/rte_trace_point.h | 4 ++++
>>>  2 files changed, 12 insertions(+)
>>>
>>> diff --git a/include/sparse/rte_mbuf.h b/include/sparse/rte_mbuf.h
>>> index ee461f91e..172c9954a 100644
>>> --- a/include/sparse/rte_mbuf.h
>>> +++ b/include/sparse/rte_mbuf.h
>>> @@ -18,10 +18,18 @@
>>>  #endif
>>>
>>>  /* sparse doesn't know about gcc atomic builtins. */
>>> +#ifndef __ATOMIC_ACQ_REL
>>>  #define __ATOMIC_ACQ_REL 0
>>> +#endif
>>> +#ifndef __ATOMIC_RELAXED
>>>  #define __ATOMIC_RELAXED 1
>>> +#endif
>>> +#ifndef __atomic_add_fetch
>>>  #define __atomic_add_fetch(p, val, memorder) (*(p) = *(p) + (val))
>>
>> So in the sparse patch https://git.kernel.org/pub/scm/devel/sparse/sparse.git/commit/?id=cf8f104749f5bca36852989297af8cc19ff24d5f
>>
>> I see the changes to the ACQ_REL and ATOMIC_RELAXED, but no mention of the atomic_add_fetch, for my own curiosity must the fetch atomic fetch and gather operations also be wrapped because of the sparse patch or is this more an effort future proof and keep the definitions uniform in OVS? Same query WRT the atomic load operation below.
> 
> There is another recent patch:
> https://git.kernel.org/pub/scm/devel/sparse/sparse.git/commit/?id=7cdf84691f33e4fc6a0198e1a04137993f3a37ad
> This one introduces support for __atomic_add_fetch and friends.
> I didn't test it, though.

OTOH, __atomic_add_fetch is a builtin function, so, IIUC, ifndef will not work.

> 
>>
>> Thanks
>> Ian
>>
>>> +#endif
>>> +#ifndef __atomic_store_n
>>>  #define __atomic_store_n(p, val, memorder) (*(p) = (val))
>>> +#endif
>>>
>>>  /* Get actual <rte_mbuf.h> definitions for us to annotate and build on. */
>>>  #include_next <rte_mbuf.h>
>>> diff --git a/include/sparse/rte_trace_point.h b/include/sparse/rte_trace_point.h
>>> index c28f1c941..94bd54b25 100644
>>> --- a/include/sparse/rte_trace_point.h
>>> +++ b/include/sparse/rte_trace_point.h
>>> @@ -18,8 +18,12 @@
>>>  #endif
>>>
>>>  /* sparse doesn't know about gcc atomic builtins. */
>>> +#ifndef __ATOMIC_ACQUIRE
>>>  #define __ATOMIC_ACQUIRE 0
>>> +#endif
>>> +#ifndef __atomic_load_n
>>>  #define __atomic_load_n(p, memorder) *(p)
>>> +#endif
>>>
>>>  /* Get actual <rte_trace_point.h> definitions for us to annotate and
>>>   * build on. */
>>> --
>>> 2.28.0.546.g385c171
>>
> 



More information about the dev mailing list