On Fri, Aug 18, 2023 at 09:13:29AM +0200, Morten Brørup wrote:
> > From: Tyler Retzlaff [mailto:roret...@linux.microsoft.com]
> > Sent: Thursday, 17 August 2023 21.14
> > 
> > On Thu, Aug 17, 2023 at 01:57:01PM +0200, Morten Brørup wrote:
> > > > From: Tyler Retzlaff [mailto:roret...@linux.microsoft.com]
> > > > Sent: Wednesday, 16 August 2023 23.39
> > > >
> > > > Refrain from using compiler __atomic_xxx builtins DPDK now requires
> > > > the use of rte_atomic_<op>_explicit macros when operating on DPDK
> > > > atomic variables.
> > >
> > > There is probably no end to how much can be added to checkpatches.
> > >
> > > You got the important stuff, so below are only further suggestions!
> > >
> > > [...]
> > >
> > > > -       # refrain from using compiler 
> > > > __atomic_{add,and,nand,or,sub,xor}_fetch()
> > > > +       # refrain from using compiler __atomic_xxx builtins
> > > >         awk -v FOLDERS="lib drivers app examples" \
> > > > -               -v 
> > > > EXPRESSIONS="__atomic_(add|and|nand|or|sub|xor)_fetch\\\(" \
> > > > +               -v EXPRESSIONS="__atomic_.*\\\(" \
> > > >                 -v RET_ON_FAIL=1 \
> > > > -               -v MESSAGE='Using __atomic_op_fetch, prefer 
> > > > __atomic_fetch_op' \
> > > > +               -v MESSAGE='Using __atomic_xxx builtins' \
> > >
> > > Alternatively:
> > >           -v MESSAGE='Using __atomic_xxx built-ins, prefer rte_atomic_xxx'
> > \
> > 
> > i can adjust the wording as you suggest, no problem
> > 
> > >
> > > >                 -f $(dirname $(readlink -f 
> > > > $0))/check-forbidden-tokens.awk \
> > > >                 "$1" || res=1
> > > >
> > > > --
> > > > 1.8.3.1
> > >
> > > This could be updated too:
> > >
> > >   # refrain from using compiler __atomic_thread_fence()
> > >   # It should be avoided on x86 for SMP case.
> > >   awk -v FOLDERS="lib drivers app examples" \
> > >           -v EXPRESSIONS="__atomic_thread_fence\\\(" \
> > >           -v RET_ON_FAIL=1 \
> > > -         -v MESSAGE='Using __atomic_thread_fence' \
> > > +         -v MESSAGE='Using __atomic_thread_fence built-in, prefer
> > __rte_atomic_thread_fence' \
> > >           -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \
> > 
> > yeah, i left this one separate i think the advice is actually use
> > rte_atomic_thread_fence which may be an inline function that uses
> > __rte_atomic_thread_fence
> 
> I now noticed that the comment to this says "# [...] should be avoided on x86 
> for SMP case." Wouldn't that apply to __rte_atomic_thread_fence too? So would 
> we want a similar warning for __rte_atomic_thread_fence in checkpatches; i.e. 
> warnings for all variants of [__[rte_]]atomic_thread_fence?

to understand how this applies we need to look at
x86/include/rte_atomic.h

static __rte_always_inline void
rte_atomic_thread_fence(rte_memory_order memorder)
{
        if (memorder == rte_memory_order_seq_cst)
                rte_smp_mb();
        else
                __rte_atomic_thread_fence(memorder);
}

So what i've done is this

You *should* always use rte_atomic_thread_fence() because it does the dance to
give you what you are supposed to on "x86 for the SMP case" right?

> 
> If the use of [__[rte_]]atomic_thread_fence is only conditionally prohibited, 
> I think that we should move the warning to the definition of 
> __rte_atomic_thread_fence itself, gated by x64 and SMP being defined. The CI 
> would catch its use in DPDK, but still allow application developers to use it 
> (for targets not being x86 SMP). What do others think?

I'll tweak the patch to warn about __rte_atomic and __atomic since the
correct usage is always using rte_atomic_xxx

> 
> > 
> > >           "$1" || res=1
> > >
> > > You could also add C11 variants of these tests...
> > >
> > atomic_(load|store|exchange|compare_exchange_(strong|weak)|fetch_(add|sub|and|
> > xor|or|nand)|flag_(test_and_set|clear))[_explicit], and
> > > atomic_thread_fence.
> > >
> > > And a test for using "_Atomic".
> > 
> > direct use would cause early compilation in the CI so it would be caught
> > fairly early. i'm not sure i want to get into the business of trying to
> > add redundant (albiet cheaper) earlier checks.
> > 
> > though if there is a general call for this from the reviewers i'll add
> > them.

Reply via email to