> -----Original Message----- > From: David Marchand <david.march...@redhat.com> > Sent: Thursday, July 16, 2020 6:49 PM > To: Phil Yang <phil.y...@arm.com> > Cc: tho...@monjalon.net; Mcnamara, John <john.mcnam...@intel.com>; > Honnappa Nagarahalli <honnappa.nagaraha...@arm.com>; David Christensen > <d...@linux.vnet.ibm.com>; dev <dev@dpdk.org>; jer...@marvell.com; > Ananyev, Konstantin <konstantin.anan...@intel.com>; Ola Liljedahl > <ola.liljed...@arm.com>; Bruce Richardson <bruce.richard...@intel.com>; > Ruifeng Wang <ruifeng.w...@arm.com>; nd <n...@arm.com> > Subject: Re: [PATCH v8 2/3] devtools: prevent use of rte atomic APIs in > future patches > > On Thu, Jul 16, 2020 at 6:58 AM Phil Yang <phil.y...@arm.com> wrote: > > > > In order to deprecate the rte_atomic and rte_smp barrier APIs, prevent > > the patches from using these APIs in the converted modules and compilers > > __sync built-ins in all modules. > > builtins* for the whole patch.
Will do. > > > > > > The converted modules: > > lib/librte_distributor > > lib/librte_hash > > lib/librte_kni > > lib/librte_lpm > > lib/librte_rcu > > lib/librte_ring > > lib/librte_stack > > lib/librte_vhost > > lib/librte_timer > > lib/librte_ipsec > > drivers/event/octeontx > > drivers/event/octeontx2 > > drivers/event/opdl > > drivers/net/bnx2x > > drivers/net/hinic > > drivers/net/hns3 > > drivers/net/memif > > drivers/net/thunderx > > drivers/net/virtio > > examples/l2fwd-event > > > > On x86 the __atomic_thread_fence(__ATOMIC_SEQ_CST) is quite > expensive > > for SMP case. Flag the new code which use __atomic_thread_fence API. > > > > Signed-off-by: Phil Yang <phil.y...@arm.com> > > Reviewed-by: Ruifeng Wang <ruifeng.w...@arm.com> > > --- > > devtools/checkpatches.sh | 40 > ++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 40 insertions(+) > > > > diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh > > index 58021aa..fb288cf 100755 > > --- a/devtools/checkpatches.sh > > +++ b/devtools/checkpatches.sh > > @@ -51,6 +51,13 @@ print_usage () { > > > > check_forbidden_additions() { # <patch> > > res=0 > > + c11_atomics_dir="lib/librte_distributor lib/librte_hash > > lib/librte_kni > > + lib/librte_lpm lib/librte_rcu lib/librte_ring > > + lib/librte_stack lib/librte_vhost > > + drivers/event/octeontx drivers/event/octeontx2 > > + drivers/event/opdl drivers/net/bnx2x > > drivers/net/hinic > > + drivers/net/hns3 drivers/net/memif > > drivers/net/thunderx > > + drivers/net/virtio examples/l2fwd-event" > > I prefer a form like: > > + c11_atomics_dir="" > + c11_atomics_dir="$c11_atomics_dir drivers/event/octeontx" > + c11_atomics_dir="$c11_atomics_dir drivers/event/octeontx2" > + c11_atomics_dir="$c11_atomics_dir drivers/event/opdl" > + c11_atomics_dir="$c11_atomics_dir drivers/net/bnx2x" > + c11_atomics_dir="$c11_atomics_dir drivers/net/hinic" > + c11_atomics_dir="$c11_atomics_dir drivers/net/hns3" > + c11_atomics_dir="$c11_atomics_dir drivers/net/memif" > + c11_atomics_dir="$c11_atomics_dir drivers/net/thunderx" > + c11_atomics_dir="$c11_atomics_dir drivers/net/virtio" > + c11_atomics_dir="$c11_atomics_dir examples/l2fwd-event" > + c11_atomics_dir="$c11_atomics_dir lib/librte_distributor" > + c11_atomics_dir="$c11_atomics_dir lib/librte_hash" > + c11_atomics_dir="$c11_atomics_dir lib/librte_kni" > + c11_atomics_dir="$c11_atomics_dir lib/librte_lpm" > + c11_atomics_dir="$c11_atomics_dir lib/librte_rcu" > + c11_atomics_dir="$c11_atomics_dir lib/librte_ring" > + c11_atomics_dir="$c11_atomics_dir lib/librte_stack" > + c11_atomics_dir="$c11_atomics_dir lib/librte_vhost" > > Easier to read and update. > > > > > > # refrain from new additions of rte_panic() and rte_exit() > > # multiple folders and expressions are separated by spaces > > @@ -74,6 +81,39 @@ check_forbidden_additions() { # <patch> > > -v > > EXPRESSIONS='for[[:space:]]*\\((char|u?int|unsigned|s?size_t)' > \ > > -v RET_ON_FAIL=1 \ > > -v MESSAGE='Declaring a variable inside for()' \ > > This hunk breaks the script. > This is not seen by the CI, as the CI uses its local copy of the script. > > We are missing a: > + "$1" || res=1 Good catch. I will fix it in this patch. > > > > + > > + # refrain from new additions of 16/32/64 bits rte_atomic_xxx() > > + # multiple folders and expressions are separated by spaces > > + awk -v FOLDERS="$c11_atomics_dir" \ > > + -v EXPRESSIONS="rte_atomic[0-9][0-9]_.*\\\(" \ > > + -v RET_ON_FAIL=1 \ > > + -v MESSAGE='Use of rte_atomicNN_xxx APIs not allowed, use > __atomic_xxx built-ins' \ > > Other messages in this script report what is wrong. > Example: > -v MESSAGE='Using rte_panic/rte_exit' \ > -v MESSAGE='Using compiler attribute directly' \ > -v MESSAGE='Declaring a variable inside for()' \ > > So to be consistent, > + -v MESSAGE='Using rte_atomicNN_xxx' \ Will do. > > > > + -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \ > > + "$1" || res=1 > > + > > + # refrain from new additions of rte_smp_XXmb() > > + # multiple folders and expressions are separated by spaces > > + awk -v FOLDERS="$c11_atomics_dir" \ > > + -v EXPRESSIONS="rte_smp_(r|w)?mb\\\(" \ > > + -v RET_ON_FAIL=1 \ > > + -v MESSAGE='Use of rte_smp_[r/w]mb not allowed, use > __atomic_xxx built-ins' \ > > + -v MESSAGE='Using rte_smp_[r/w]mb' \ Will do. > > > + -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \ > > + "$1" || res=1 > > + > > + # refrain from using compiler __sync built-ins > > + awk -v FOLDERS="lib drivers app examples" \ > > + -v EXPRESSIONS="__sync_.*\\\(" \ > > + -v RET_ON_FAIL=1 \ > > + -v MESSAGE='Use of __sync_xxx built-ins not allowed, use > __atomic_xxx built-ins' \ > > + -v MESSAGE='Using __sync_xxx builtins' \ Will do. > > > > + -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \ > > + "$1" || res=1 > > + > > + # 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='The __atomic_thread_fence is not allowed, use > rte_atomic_thread_fence' \ > > + -v MESSAGE='Using __atomic_thread_fence' \ Will do. > > > > -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \ > > "$1" || res=1 > > > > > -- > David Marchand