From f1602b4a86e8c0622326fad4f12a23e6ae0d435c Mon Sep 17 00:00:00 2001 From: Phil Yang Date: Fri, 17 Jul 2020 18:14:37 +0800 Subject: [PATCH] devtools: prevent use of legacy atomic API In order to deprecate the rte_atomic and rte_smp barrier APIs [1], prevent the patches from using these APIs and __sync builtins in new code. Please use __atomic builtins instead of __sync builtins, rte_atomicNN_xxx and rte_smp_[r/w]mb APIs. 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. Please use rte_thread_fence API instead of __atomic_thread_fence builtins. 1: Refer to the locks-and-atomic-operations section in https://doc.dpdk.org/guides/prog_guide/writing_efficient_code.html Signed-off-by: Phil Yang Reviewed-by: Ruifeng Wang --- devtools/checkpatches.sh | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh index 58021aa5dd..6966922e46 100755 --- a/devtools/checkpatches.sh +++ b/devtools/checkpatches.sh @@ -77,6 +77,39 @@ check_forbidden_additions() { # -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \ "$1" || res=1 + # refrain from new additions of 16/32/64 bits rte_atomicNN_xxx() + awk -v FOLDERS="lib drivers app examples" \ + -v EXPRESSIONS="rte_atomic[0-9][0-9]_.*\\\(" \ + -v RET_ON_FAIL=1 \ + -v MESSAGE='Using rte_atomicNN_xxx' \ + -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \ + "$1" || res=1 + + # refrain from new additions of rte_smp_[r/w]mb() + awk -v FOLDERS="lib drivers app examples" \ + -v EXPRESSIONS="rte_smp_(r|w)?mb\\\(" \ + -v RET_ON_FAIL=1 \ + -v MESSAGE='Using rte_smp_[r/w]mb' \ + -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \ + "$1" || res=1 + + # refrain from using compiler __sync_xxx builtins + awk -v FOLDERS="lib drivers app examples" \ + -v EXPRESSIONS="__sync_.*\\\(" \ + -v RET_ON_FAIL=1 \ + -v MESSAGE='Using __sync_xxx builtins' \ + -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='Using __atomic_thread_fence' \ + -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \ + "$1" || res=1 + # svg figures must be included with wildcard extension # because of png conversion for pdf docs awk -v FOLDERS='doc' \ -- 2.20.1