[v9,2/3] devtools: prevent use of rte atomic APIs in future patches

Message ID 1594962519-20619-3-git-send-email-phil.yang@arm.com (mailing list archive)
State Superseded, archived
Delegated to: David Marchand
Headers
Series generic rte atomic APIs deprecate proposal |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Phil Yang July 17, 2020, 5:08 a.m. UTC
In order to deprecate the rte_atomic and rte_smp barrier APIs, prevent
the patches from using these APIs and __sync builtins in new code.

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.yang@arm.com>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
---
 devtools/checkpatches.sh | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)
  

Comments

Thomas Monjalon July 17, 2020, 8:35 a.m. UTC | #1
17/07/2020 07:08, Phil Yang:
> In order to deprecate the rte_atomic and rte_smp barrier APIs, prevent
> the patches from using these APIs and __sync builtins in new code.
> 
> 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.

When receiving such message error, I would look at the explanations
in the git history. Unfortunately this commit log does not reference
the documentation. Please add a link and give the 4 direct replacements
in this commit log.
  
Phil Yang July 17, 2020, 9:41 a.m. UTC | #2
Thomas Monjalon <thomas@monjalon.net> wrties:


> > In order to deprecate the rte_atomic and rte_smp barrier APIs, prevent
> > the patches from using these APIs and __sync builtins in new code.
> >
> > 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.
> 
> When receiving such message error, I would look at the explanations
> in the git history. Unfortunately this commit log does not reference
> the documentation. Please add a link and give the 4 direct replacements
> in this commit log.

I will update it in v10. Thanks.
How about putting it like this? (Truncated the long link to pass the long line check)

"
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.

[1] Refer to the locks-and-atomic-operations section in
https://doc.dpdk.org/guides/prog_guide/writing_efficient_code.html.
"
  

Patch

diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh
index 58021aa..990a4d0 100755
--- a/devtools/checkpatches.sh
+++ b/devtools/checkpatches.sh
@@ -77,6 +77,41 @@  check_forbidden_additions() { # <patch>
 		-f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \
 		"$1" || res=1
 
+	# refrain from new additions of 16/32/64 bits rte_atomic_xxx()
+	# multiple folders and expressions are separated by spaces
+	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_XXmb()
+	# multiple folders and expressions are separated by spaces
+	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 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' \