From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 11045A00BE;
	Tue,  7 Jul 2020 11:51:50 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 926601DDA7;
	Tue,  7 Jul 2020 11:51:38 +0200 (CEST)
Received: from foss.arm.com (foss.arm.com [217.140.110.172])
 by dpdk.org (Postfix) with ESMTP id 1CBD71DDA7
 for <dev@dpdk.org>; Tue,  7 Jul 2020 11:51:37 +0200 (CEST)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 936D4C0A;
 Tue,  7 Jul 2020 02:51:36 -0700 (PDT)
Received: from phil-VirtualBox.shanghai.arm.com
 (phil-VirtualBox.shanghai.arm.com [10.169.109.153])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 6F97D3F718;
 Tue,  7 Jul 2020 02:51:33 -0700 (PDT)
From: Phil Yang <phil.yang@arm.com>
To: thomas@monjalon.net,
	dev@dpdk.org,
	david.marchand@redhat.com
Cc: drc@linux.vnet.ibm.com, Honnappa.Nagarahalli@arm.com, jerinj@marvell.com,
 konstantin.ananyev@intel.com, Ola.Liljedahl@arm.com, ruifeng.wang@arm.com,
 nd@arm.com
Date: Tue,  7 Jul 2020 17:50:48 +0800
Message-Id: <1594115449-13750-4-git-send-email-phil.yang@arm.com>
X-Mailer: git-send-email 2.7.4
In-Reply-To: <1594115449-13750-1-git-send-email-phil.yang@arm.com>
References: <1590483667-10318-1-git-send-email-phil.yang@arm.com>
 <1594115449-13750-1-git-send-email-phil.yang@arm.com>
Subject: [dpdk-dev] [PATCH v6 3/4] devtools: prevent use of rte atomic APIs
	in future patches
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

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.

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

diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh
index 58021aa..68dc598 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"
 
 	# 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()' \
+
+	# 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' \
+		-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/wmb not allowed, use __atomic_xxx built-ins' \
+		-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' \
+		-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='Use of __atomic_thread_fence is not allowed, use rte_atomic_thread_fence' \
 		-f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \
 		"$1" || res=1
 
-- 
2.7.4