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 1AE48A04BB;
	Fri, 11 Sep 2020 17:31:36 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 45B8E1C10A;
	Fri, 11 Sep 2020 17:31:26 +0200 (CEST)
Received: from foss.arm.com (foss.arm.com [217.140.110.172])
 by dpdk.org (Postfix) with ESMTP id 2C6E61C10A
 for <dev@dpdk.org>; Fri, 11 Sep 2020 17:31:25 +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 B32B81063;
 Fri, 11 Sep 2020 08:31:24 -0700 (PDT)
Received: from localhost.localdomain (unknown [10.57.10.210])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 545393F73C;
 Fri, 11 Sep 2020 08:31:23 -0700 (PDT)
From: Steven Lariau <steven.lariau@arm.com>
To: Gage Eads <gage.eads@intel.com>,
	Olivier Matz <olivier.matz@6wind.com>
Cc: dev@dpdk.org, nd@arm.com, dharmik.thakkar@arm.com,
 Steven Lariau <steven.lariau@arm.com>
Date: Fri, 11 Sep 2020 16:29:36 +0100
Message-Id: <20200911152938.8019-4-steven.lariau@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20200911152938.8019-1-steven.lariau@arm.com>
References: <20200911152938.8019-1-steven.lariau@arm.com>
Subject: [dpdk-dev] [PATCH 3/5] lib/stack: remove redundant orderings for
	list->len
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>

The load-acquire of list->len on pop function is redundant.
Only the CAS success needs to be load-acquire.
It synchronizes with the store release in push, to ensure that the
updated head is visible when the new length is visible.
Without this, one thread in pop could see the increased length but the
old list, which doesn't have enough items yet for pop to succeed.

Signed-off-by: Steven Lariau <steven.lariau@arm.com>
Reviewed-by: Dharmik Thakkar <dharmik.thakkar@arm.com>
Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com>
---
 lib/librte_stack/rte_stack_lf_c11.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/librte_stack/rte_stack_lf_c11.h b/lib/librte_stack/rte_stack_lf_c11.h
index 82b7287f1..2bc639419 100644
--- a/lib/librte_stack/rte_stack_lf_c11.h
+++ b/lib/librte_stack/rte_stack_lf_c11.h
@@ -80,7 +80,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
 	int success;
 
 	/* Reserve num elements, if available */
-	len = __atomic_load_n(&list->len, __ATOMIC_ACQUIRE);
+	len = __atomic_load_n(&list->len, __ATOMIC_RELAXED);
 
 	while (1) {
 		/* Does the list contain enough elements? */
@@ -91,7 +91,7 @@ __rte_stack_lf_pop_elems(struct rte_stack_lf_list *list,
 		if (__atomic_compare_exchange_n(&list->len,
 						&len, len - num,
 						1, __ATOMIC_ACQUIRE,
-						__ATOMIC_ACQUIRE))
+						__ATOMIC_RELAXED))
 			break;
 	}
 
-- 
2.17.1