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 dpdk.space (Postfix) with ESMTP id 824CDA0679
	for <public@inbox.dpdk.org>; Thu,  4 Apr 2019 12:03:20 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 41B201B1F6;
	Thu,  4 Apr 2019 12:02:33 +0200 (CEST)
Received: from mga07.intel.com (mga07.intel.com [134.134.136.100])
 by dpdk.org (Postfix) with ESMTP id 0821B1B131
 for <dev@dpdk.org>; Thu,  4 Apr 2019 12:02:17 +0200 (CEST)
X-Amp-Result: SKIPPED(no attachment in message)
X-Amp-File-Uploaded: False
Received: from orsmga006.jf.intel.com ([10.7.209.51])
 by orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;
 04 Apr 2019 03:02:17 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.60,308,1549958400"; d="scan'208";a="132898929"
Received: from txasoft-yocto.an.intel.com ([10.123.72.192])
 by orsmga006.jf.intel.com with ESMTP; 04 Apr 2019 03:02:16 -0700
From: Gage Eads <gage.eads@intel.com>
To: dev@dpdk.org
Cc: olivier.matz@6wind.com, arybchenko@solarflare.com,
 bruce.richardson@intel.com, konstantin.ananyev@intel.com, gavin.hu@arm.com,
 Honnappa.Nagarahalli@arm.com, nd@arm.com, thomas@monjalon.net
Date: Thu,  4 Apr 2019 05:01:26 -0500
Message-Id: <20190404100127.29381-8-gage.eads@intel.com>
X-Mailer: git-send-email 2.13.6
In-Reply-To: <20190404100127.29381-1-gage.eads@intel.com>
References: <20190403232020.12784-1-gage.eads@intel.com>
 <20190404100127.29381-1-gage.eads@intel.com>
Subject: [dpdk-dev] [PATCH v10 7/8] test/stack: add lock-free stack tests
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>
Content-Type: text/plain; charset="UTF-8"
Message-ID: <20190404100126.EQMALYqXX9w_UJgxoCs6jJNRSNOEZ2S8bTpsCuzvKng@z>

This commit adds lock-free stack variants of stack_autotest
(stack_lf_autotest) and stack_perf_autotest (stack_lf_perf_autotest), which
differ only in that the lock-free versions pass the RTE_STACK_F_LF flag to
all rte_stack_create() calls.

Signed-off-by: Gage Eads <gage.eads@intel.com>
Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
---
 app/test/meson.build       |  2 ++
 app/test/test_stack.c      | 41 +++++++++++++++++++++++++++--------------
 app/test/test_stack_perf.c | 17 +++++++++++++++--
 3 files changed, 44 insertions(+), 16 deletions(-)

diff --git a/app/test/meson.build b/app/test/meson.build
index 02eb788a4..867cc5863 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -178,6 +178,7 @@ fast_parallel_test_names = [
         'sched_autotest',
         'spinlock_autotest',
         'stack_autotest',
+        'stack_nb_autotest',
         'string_autotest',
         'table_autotest',
         'tailq_autotest',
@@ -243,6 +244,7 @@ perf_test_names = [
         'ring_pmd_perf_autotest',
         'pmd_perf_autotest',
         'stack_perf_autotest',
+        'stack_nb_perf_autotest',
 ]
 
 # All test cases in driver_test_names list are non-parallel
diff --git a/app/test/test_stack.c b/app/test/test_stack.c
index 6be2f876b..e972a61a7 100644
--- a/app/test/test_stack.c
+++ b/app/test/test_stack.c
@@ -98,7 +98,7 @@ test_stack_push_pop(struct rte_stack *s, void **obj_table, unsigned int bulk_sz)
 }
 
 static int
-test_stack_basic(void)
+test_stack_basic(uint32_t flags)
 {
 	struct rte_stack *s = NULL;
 	void **obj_table = NULL;
@@ -114,7 +114,7 @@ test_stack_basic(void)
 	for (i = 0; i < STACK_SIZE; i++)
 		obj_table[i] = (void *)(uintptr_t)i;
 
-	s = rte_stack_create(__func__, STACK_SIZE, rte_socket_id(), 0);
+	s = rte_stack_create(__func__, STACK_SIZE, rte_socket_id(), flags);
 	if (s == NULL) {
 		printf("[%s():%u] failed to create a stack\n",
 		       __func__, __LINE__);
@@ -178,18 +178,18 @@ test_stack_basic(void)
 }
 
 static int
-test_stack_name_reuse(void)
+test_stack_name_reuse(uint32_t flags)
 {
 	struct rte_stack *s[2];
 
-	s[0] = rte_stack_create("test", STACK_SIZE, rte_socket_id(), 0);
+	s[0] = rte_stack_create("test", STACK_SIZE, rte_socket_id(), flags);
 	if (s[0] == NULL) {
 		printf("[%s():%u] Failed to create a stack\n",
 		       __func__, __LINE__);
 		return -1;
 	}
 
-	s[1] = rte_stack_create("test", STACK_SIZE, rte_socket_id(), 0);
+	s[1] = rte_stack_create("test", STACK_SIZE, rte_socket_id(), flags);
 	if (s[1] != NULL) {
 		printf("[%s():%u] Failed to detect re-used name\n",
 		       __func__, __LINE__);
@@ -202,7 +202,7 @@ test_stack_name_reuse(void)
 }
 
 static int
-test_stack_name_length(void)
+test_stack_name_length(uint32_t flags)
 {
 	char name[RTE_STACK_NAMESIZE + 1];
 	struct rte_stack *s;
@@ -210,7 +210,7 @@ test_stack_name_length(void)
 	memset(name, 's', sizeof(name));
 	name[RTE_STACK_NAMESIZE] = '\0';
 
-	s = rte_stack_create(name, STACK_SIZE, rte_socket_id(), 0);
+	s = rte_stack_create(name, STACK_SIZE, rte_socket_id(), flags);
 	if (s != NULL) {
 		printf("[%s():%u] Failed to prevent long name\n",
 		       __func__, __LINE__);
@@ -329,7 +329,7 @@ stack_thread_push_pop(void *args)
 }
 
 static int
-test_stack_multithreaded(void)
+test_stack_multithreaded(uint32_t flags)
 {
 	struct test_args *args;
 	unsigned int lcore_id;
@@ -350,7 +350,7 @@ test_stack_multithreaded(void)
 		return -1;
 	}
 
-	s = rte_stack_create("test", STACK_SIZE, rte_socket_id(), 0);
+	s = rte_stack_create("test", STACK_SIZE, rte_socket_id(), flags);
 	if (s == NULL) {
 		printf("[%s():%u] Failed to create a stack\n",
 		       __func__, __LINE__);
@@ -385,9 +385,9 @@ test_stack_multithreaded(void)
 }
 
 static int
-test_stack(void)
+__test_stack(uint32_t flags)
 {
-	if (test_stack_basic() < 0)
+	if (test_stack_basic(flags) < 0)
 		return -1;
 
 	if (test_lookup_null() < 0)
@@ -396,16 +396,29 @@ test_stack(void)
 	if (test_free_null() < 0)
 		return -1;
 
-	if (test_stack_name_reuse() < 0)
+	if (test_stack_name_reuse(flags) < 0)
 		return -1;
 
-	if (test_stack_name_length() < 0)
+	if (test_stack_name_length(flags) < 0)
 		return -1;
 
-	if (test_stack_multithreaded() < 0)
+	if (test_stack_multithreaded(flags) < 0)
 		return -1;
 
 	return 0;
 }
 
+static int
+test_stack(void)
+{
+	return __test_stack(0);
+}
+
+static int
+test_lf_stack(void)
+{
+	return __test_stack(RTE_STACK_F_LF);
+}
+
 REGISTER_TEST_COMMAND(stack_autotest, test_stack);
+REGISTER_TEST_COMMAND(stack_lf_autotest, test_lf_stack);
diff --git a/app/test/test_stack_perf.c b/app/test/test_stack_perf.c
index a44fbb73e..ba27fbf70 100644
--- a/app/test/test_stack_perf.c
+++ b/app/test/test_stack_perf.c
@@ -299,14 +299,14 @@ test_bulk_push_pop(struct rte_stack *s)
 }
 
 static int
-test_stack_perf(void)
+__test_stack_perf(uint32_t flags)
 {
 	struct lcore_pair cores;
 	struct rte_stack *s;
 
 	rte_atomic32_init(&lcore_barrier);
 
-	s = rte_stack_create(STACK_NAME, STACK_SIZE, rte_socket_id(), 0);
+	s = rte_stack_create(STACK_NAME, STACK_SIZE, rte_socket_id(), flags);
 	if (s == NULL) {
 		printf("[%s():%u] failed to create a stack\n",
 		       __func__, __LINE__);
@@ -342,4 +342,17 @@ test_stack_perf(void)
 	return 0;
 }
 
+static int
+test_stack_perf(void)
+{
+	return __test_stack_perf(0);
+}
+
+static int
+test_lf_stack_perf(void)
+{
+	return __test_stack_perf(RTE_STACK_F_LF);
+}
+
 REGISTER_TEST_COMMAND(stack_perf_autotest, test_stack_perf);
+REGISTER_TEST_COMMAND(stack_lf_perf_autotest, test_lf_stack_perf);
-- 
2.13.6