All of lore.kernel.org
 help / color / mirror / Atom feed
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
Subject: [PATCH v3 3/8] test/stack: add stack test
Date: Wed,  6 Mar 2019 08:45:54 -0600	[thread overview]
Message-ID: <20190306144559.391-4-gage.eads@intel.com> (raw)
In-Reply-To: <20190306144559.391-1-gage.eads@intel.com>

stack_autotest performs positive and negative testing of the stack API, and
exercises the push and pop datapath functions with all available lcores.

Signed-off-by: Gage Eads <gage.eads@intel.com>
---
 MAINTAINERS           |   1 +
 app/test/Makefile     |   2 +
 app/test/meson.build  |   3 +
 app/test/test_stack.c | 410 ++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 416 insertions(+)
 create mode 100644 app/test/test_stack.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 4e088d2bd..f6593fa9c 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -410,6 +410,7 @@ M: Olivier Matz <olivier.matz@6wind.com>
 F: lib/librte_stack/
 F: doc/guides/prog_guide/stack_lib.rst
 F: drivers/mempool/stack/
+F: test/test/*stack*
 
 
 Memory Pool Drivers
diff --git a/app/test/Makefile b/app/test/Makefile
index 89949c2bb..47cf98a3a 100644
--- a/app/test/Makefile
+++ b/app/test/Makefile
@@ -89,6 +89,8 @@ endif
 
 SRCS-y += test_rwlock.c
 
+SRCS-$(CONFIG_RTE_LIBRTE_STACK) += test_stack.c
+
 SRCS-$(CONFIG_RTE_LIBRTE_TIMER) += test_timer.c
 SRCS-$(CONFIG_RTE_LIBRTE_TIMER) += test_timer_perf.c
 SRCS-$(CONFIG_RTE_LIBRTE_TIMER) += test_timer_racecond.c
diff --git a/app/test/meson.build b/app/test/meson.build
index 05e5ddeb0..b00e1201a 100644
--- a/app/test/meson.build
+++ b/app/test/meson.build
@@ -95,6 +95,7 @@ test_sources = files('commands.c',
 	'test_sched.c',
 	'test_service_cores.c',
 	'test_spinlock.c',
+	'test_stack.c',
 	'test_string_fns.c',
 	'test_table.c',
 	'test_table_acl.c',
@@ -132,6 +133,7 @@ test_deps = ['acl',
 	'port',
 	'reorder',
 	'ring',
+	'stack',
 	'timer'
 ]
 
@@ -173,6 +175,7 @@ fast_parallel_test_names = [
         'rwlock_autotest',
         'sched_autotest',
         'spinlock_autotest',
+        'stack_autotest',
         'string_autotest',
         'table_autotest',
         'tailq_autotest',
diff --git a/app/test/test_stack.c b/app/test/test_stack.c
new file mode 100644
index 000000000..92ce05288
--- /dev/null
+++ b/app/test/test_stack.c
@@ -0,0 +1,410 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2019 Intel Corporation
+ */
+
+#include <string.h>
+
+#include <rte_lcore.h>
+#include <rte_malloc.h>
+#include <rte_random.h>
+#include <rte_stack.h>
+
+#include "test.h"
+
+#define STACK_SIZE 4096
+#define MAX_BULK 32
+
+static int
+test_stack_push_pop(struct rte_stack *s, void **obj_table, unsigned int bulk_sz)
+{
+	unsigned int i, ret;
+	void **popped_objs;
+
+	popped_objs = rte_calloc(NULL, STACK_SIZE, sizeof(void *), 0);
+	if (popped_objs == NULL) {
+		printf("[%s():%u] failed to calloc %lu bytes\n",
+		       __func__, __LINE__, STACK_SIZE * sizeof(void *));
+		return -1;
+	}
+
+	for (i = 0; i < STACK_SIZE; i += bulk_sz) {
+		ret = rte_stack_push(s, &obj_table[i], bulk_sz);
+
+		if (ret != bulk_sz) {
+			printf("[%s():%u] push returned: %d (expected %u)\n",
+			       __func__, __LINE__, ret, bulk_sz);
+			rte_free(popped_objs);
+			return -1;
+		}
+
+		if (rte_stack_count(s) != i + bulk_sz) {
+			printf("[%s():%u] stack count: %u (expected %u)\n",
+			       __func__, __LINE__, rte_stack_count(s),
+			       i + bulk_sz);
+			rte_free(popped_objs);
+			return -1;
+		}
+
+		if (rte_stack_free_count(s) != STACK_SIZE - i - bulk_sz) {
+			printf("[%s():%u] stack free count: %u (expected %u)\n",
+			       __func__, __LINE__, rte_stack_count(s),
+			       STACK_SIZE - i - bulk_sz);
+			rte_free(popped_objs);
+			return -1;
+		}
+	}
+
+	for (i = 0; i < STACK_SIZE; i += bulk_sz) {
+		ret = rte_stack_pop(s, &popped_objs[i], bulk_sz);
+
+		if (ret != bulk_sz) {
+			printf("[%s():%u] pop returned: %d (expected %u)\n",
+			       __func__, __LINE__, ret, bulk_sz);
+			rte_free(popped_objs);
+			return -1;
+		}
+
+		if (rte_stack_count(s) != STACK_SIZE - i - bulk_sz) {
+			printf("[%s():%u] stack count: %u (expected %u)\n",
+			       __func__, __LINE__, rte_stack_count(s),
+			       STACK_SIZE - i - bulk_sz);
+			rte_free(popped_objs);
+			return -1;
+		}
+
+		if (rte_stack_free_count(s) != i + bulk_sz) {
+			printf("[%s():%u] stack free count: %u (expected %u)\n",
+			       __func__, __LINE__, rte_stack_count(s),
+			       i + bulk_sz);
+			rte_free(popped_objs);
+			return -1;
+		}
+	}
+
+	for (i = 0; i < STACK_SIZE; i++) {
+		if (obj_table[i] != popped_objs[STACK_SIZE - i - 1]) {
+			printf("[%s():%u] Incorrect value %p at index 0x%x\n",
+			       __func__, __LINE__,
+			       popped_objs[STACK_SIZE - i - 1], i);
+			rte_free(popped_objs);
+			return -1;
+		}
+	}
+
+	rte_free(popped_objs);
+
+	return 0;
+}
+
+static int
+test_stack_basic(void)
+{
+	struct rte_stack *s = NULL;
+	void **obj_table = NULL;
+	int i, ret = -1;
+
+	obj_table = rte_calloc(NULL, STACK_SIZE, sizeof(void *), 0);
+	if (obj_table == NULL) {
+		printf("[%s():%u] failed to calloc %lu bytes\n",
+		       __func__, __LINE__, STACK_SIZE * sizeof(void *));
+		goto fail_test;
+	}
+
+	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);
+	if (s == NULL) {
+		printf("[%s():%u] failed to create a stack\n",
+		       __func__, __LINE__);
+		goto fail_test;
+	}
+
+	if (rte_stack_lookup(__func__) != s) {
+		printf("[%s():%u] failed to lookup a stack\n",
+		       __func__, __LINE__);
+		goto fail_test;
+	}
+
+	if (rte_stack_count(s) != 0) {
+		printf("[%s():%u] stack count: %u (expected 0)\n",
+		       __func__, __LINE__, rte_stack_count(s));
+		goto fail_test;
+	}
+
+	if (rte_stack_free_count(s) != STACK_SIZE) {
+		printf("[%s():%u] stack free count: %u (expected %u)\n",
+		       __func__, __LINE__, rte_stack_count(s), STACK_SIZE);
+		goto fail_test;
+	}
+
+	ret = test_stack_push_pop(s, obj_table, 1);
+	if (ret) {
+		printf("[%s():%u] Single object push/pop failed\n",
+		       __func__, __LINE__);
+		goto fail_test;
+	}
+
+	ret = test_stack_push_pop(s, obj_table, MAX_BULK);
+	if (ret) {
+		printf("[%s():%u] Bulk object push/pop failed\n",
+		       __func__, __LINE__);
+		goto fail_test;
+	}
+
+	ret = rte_stack_push(s, obj_table, 2 * STACK_SIZE);
+	if (ret != 0) {
+		printf("[%s():%u] Excess objects push succeeded\n",
+		       __func__, __LINE__);
+		goto fail_test;
+	}
+
+	ret = rte_stack_pop(s, obj_table, 1);
+	if (ret != 0) {
+		printf("[%s():%u] Empty stack pop succeeded\n",
+		       __func__, __LINE__);
+		goto fail_test;
+	}
+
+	ret = 0;
+
+fail_test:
+	rte_stack_free(s);
+
+	rte_free(obj_table);
+
+	return ret;
+}
+
+static int
+test_stack_name_reuse(void)
+{
+	struct rte_stack *s[2];
+
+	s[0] = rte_stack_create("test", STACK_SIZE, rte_socket_id(), 0);
+	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);
+	if (s[1] != NULL) {
+		printf("[%s():%u] Failed to detect re-used name\n",
+		       __func__, __LINE__);
+		return -1;
+	}
+
+	rte_stack_free(s[0]);
+
+	return 0;
+}
+
+static int
+test_stack_name_length(void)
+{
+	char name[RTE_STACK_NAMESIZE + 1];
+	struct rte_stack *s;
+
+	memset(name, 's', sizeof(name));
+	name[RTE_STACK_NAMESIZE] = '\0';
+
+	s = rte_stack_create(name, STACK_SIZE, rte_socket_id(), 0);
+	if (s != NULL) {
+		printf("[%s():%u] Failed to prevent long name\n",
+		       __func__, __LINE__);
+		return -1;
+	}
+
+	if (rte_errno != ENAMETOOLONG) {
+		printf("[%s():%u] rte_stack failed to set correct errno on failed lookup\n",
+		       __func__, __LINE__);
+		return -1;
+	}
+
+	return 0;
+}
+
+static int
+test_lookup_null(void)
+{
+	struct rte_stack *s = rte_stack_lookup("stack_not_found");
+
+	if (s != NULL) {
+		printf("[%s():%u] rte_stack found a non-existent stack\n",
+		       __func__, __LINE__);
+		return -1;
+	}
+
+	if (rte_errno != ENOENT) {
+		printf("[%s():%u] rte_stack failed to set correct errno on failed lookup\n",
+		       __func__, __LINE__);
+		return -1;
+	}
+
+	s = rte_stack_lookup(NULL);
+
+	if (s != NULL) {
+		printf("[%s():%u] rte_stack found a non-existent stack\n",
+		       __func__, __LINE__);
+		return -1;
+	}
+
+	if (rte_errno != EINVAL) {
+		printf("[%s():%u] rte_stack failed to set correct errno on failed lookup\n",
+		       __func__, __LINE__);
+		return -1;
+	}
+
+	return 0;
+}
+
+static int
+test_free_null(void)
+{
+	/* Check whether the library proper handles a NULL pointer */
+	rte_stack_free(NULL);
+
+	return 0;
+}
+
+#define NUM_ITERS_PER_THREAD 100000
+
+struct test_args {
+	struct rte_stack *s;
+	rte_atomic64_t *sz;
+};
+
+static int
+stack_thread_push_pop(void *args)
+{
+	struct test_args *t = args;
+	void **obj_table;
+	int i;
+
+	obj_table = rte_calloc(NULL, STACK_SIZE, sizeof(void *), 0);
+	if (obj_table == NULL) {
+		printf("[%s():%u] failed to calloc %lu bytes\n",
+		       __func__, __LINE__, STACK_SIZE * sizeof(void *));
+		return -1;
+	}
+
+	for (i = 0; i < NUM_ITERS_PER_THREAD; i++) {
+		unsigned int success, num;
+
+		/* Reserve up to min(MAX_BULK, available slots) stack entries,
+		 * then push and pop those stack entries.
+		 */
+		do {
+			uint64_t sz = rte_atomic64_read(t->sz);
+			volatile uint64_t *sz_addr;
+
+			sz_addr = (volatile uint64_t *)t->sz;
+
+			num = RTE_MIN(rte_rand() % MAX_BULK, STACK_SIZE - sz);
+
+			success = rte_atomic64_cmpset(sz_addr, sz, sz + num);
+		} while (success == 0);
+
+		if (rte_stack_push(t->s, obj_table, num) != num) {
+			printf("[%s():%u] Failed to push %u pointers\n",
+			       __func__, __LINE__, num);
+			rte_free(obj_table);
+			return -1;
+		}
+
+		if (rte_stack_pop(t->s, obj_table, num) != num) {
+			printf("[%s():%u] Failed to pop %u pointers\n",
+			       __func__, __LINE__, num);
+			rte_free(obj_table);
+			return -1;
+		}
+
+		rte_atomic64_sub(t->sz, num);
+	}
+
+	rte_free(obj_table);
+	return 0;
+}
+
+static int
+test_stack_multithreaded(void)
+{
+	struct test_args *args;
+	unsigned int lcore_id;
+	struct rte_stack *s;
+	rte_atomic64_t size;
+
+	printf("[%s():%u] Running with %u lcores\n",
+	       __func__, __LINE__, rte_lcore_count());
+
+	if (rte_lcore_count() < 2)
+		return 0;
+
+	args = rte_malloc(NULL, sizeof(struct test_args) * RTE_MAX_LCORE, 0);
+	if (args == NULL) {
+		printf("[%s():%u] failed to malloc %lu bytes\n",
+		       __func__, __LINE__,
+		       sizeof(struct test_args) * RTE_MAX_LCORE);
+		return -1;
+	}
+
+	s = rte_stack_create("test", STACK_SIZE, rte_socket_id(), 0);
+	if (s == NULL) {
+		printf("[%s():%u] Failed to create a stack\n",
+		       __func__, __LINE__);
+		rte_free(args);
+		return -1;
+	}
+
+	rte_atomic64_init(&size);
+
+	RTE_LCORE_FOREACH_SLAVE(lcore_id) {
+		args[lcore_id].s = s;
+		args[lcore_id].sz = &size;
+
+		if (rte_eal_remote_launch(stack_thread_push_pop,
+					  &args[lcore_id], lcore_id))
+			rte_panic("Failed to launch lcore %d\n", lcore_id);
+	}
+
+	lcore_id = rte_lcore_id();
+
+	args[lcore_id].s = s;
+	args[lcore_id].sz = &size;
+
+	stack_thread_push_pop(&args[lcore_id]);
+
+	rte_eal_mp_wait_lcore();
+
+	rte_stack_free(s);
+	rte_free(args);
+
+	return 0;
+}
+
+static int
+test_stack(void)
+{
+	if (test_stack_basic() < 0)
+		return -1;
+
+	if (test_lookup_null() < 0)
+		return -1;
+
+	if (test_free_null() < 0)
+		return -1;
+
+	if (test_stack_name_reuse() < 0)
+		return -1;
+
+	if (test_stack_name_length() < 0)
+		return -1;
+
+	if (test_stack_multithreaded() < 0)
+		return -1;
+
+	return 0;
+}
+
+REGISTER_TEST_COMMAND(stack_autotest, test_stack);
-- 
2.13.6

  parent reply	other threads:[~2019-03-06 14:46 UTC|newest]

Thread overview: 133+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-22 16:06 [PATCH 0/7] Subject: [PATCH ...] Add stack library and new mempool handler Gage Eads
2019-02-22 16:06 ` [PATCH 1/7] stack: introduce rte stack library Gage Eads
2019-02-25 10:43   ` Olivier Matz
2019-02-28  5:10     ` Eads, Gage
2019-02-22 16:06 ` [PATCH 2/7] mempool/stack: convert mempool to use rte stack Gage Eads
2019-02-25 10:46   ` Olivier Matz
2019-02-22 16:06 ` [PATCH 3/7] test/stack: add stack test Gage Eads
2019-02-25 10:59   ` Olivier Matz
2019-02-28  5:11     ` Eads, Gage
2019-02-22 16:06 ` [PATCH 4/7] test/stack: add stack perf test Gage Eads
2019-02-25 11:04   ` Olivier Matz
2019-02-22 16:06 ` [PATCH 5/7] stack: add non-blocking stack implementation Gage Eads
2019-02-25 11:28   ` Olivier Matz
     [not found]     ` <2EC44CCD3517A842B44C82651A5557A14AF13386@fmsmsx118.amr.corp.intel.com>
2019-03-01 20:53       ` FW: " Eads, Gage
2019-03-01 21:12         ` Thomas Monjalon
2019-03-01 21:29           ` Eads, Gage
2019-02-22 16:06 ` [PATCH 6/7] test/stack: add non-blocking stack tests Gage Eads
2019-02-25 11:28   ` Olivier Matz
2019-02-22 16:06 ` [PATCH 7/7] mempool/stack: add non-blocking stack mempool handler Gage Eads
2019-02-25 11:29   ` Olivier Matz
2019-03-05 16:42 ` [PATCH v2 0/8] Add stack library and new " Gage Eads
2019-03-05 16:42   ` [PATCH v2 1/8] stack: introduce rte stack library Gage Eads
2019-03-05 16:42   ` [PATCH v2 2/8] mempool/stack: convert mempool to use rte stack Gage Eads
2019-03-05 16:42   ` [PATCH v2 3/8] test/stack: add stack test Gage Eads
2019-03-05 16:42   ` [PATCH v2 4/8] test/stack: add stack perf test Gage Eads
2019-03-05 16:42   ` [PATCH v2 5/8] stack: add lock-free stack implementation Gage Eads
2019-03-05 16:42   ` [PATCH v2 6/8] stack: add C11 atomic implementation Gage Eads
2019-03-05 16:42   ` [PATCH v2 7/8] test/stack: add lock-free stack tests Gage Eads
2019-03-05 16:42   ` [PATCH v2 8/8] mempool/stack: add lock-free stack mempool handler Gage Eads
2019-03-06 14:45   ` [PATCH v3 0/8] Add stack library and new " Gage Eads
2019-03-06 14:45     ` [PATCH v3 1/8] stack: introduce rte stack library Gage Eads
2019-03-14  8:00       ` Olivier Matz
2019-03-28 23:26       ` Honnappa Nagarahalli
2019-03-29 19:23         ` Eads, Gage
2019-03-29 21:07           ` Thomas Monjalon
2019-04-01 17:41           ` Honnappa Nagarahalli
2019-04-01 19:34             ` Eads, Gage
2019-03-06 14:45     ` [PATCH v3 2/8] mempool/stack: convert mempool to use rte stack Gage Eads
2019-03-06 14:45     ` Gage Eads [this message]
2019-03-14  8:00       ` [PATCH v3 3/8] test/stack: add stack test Olivier Matz
2019-03-06 14:45     ` [PATCH v3 4/8] test/stack: add stack perf test Gage Eads
2019-03-06 14:45     ` [PATCH v3 5/8] stack: add lock-free stack implementation Gage Eads
2019-03-14  8:01       ` Olivier Matz
2019-03-28 23:27       ` Honnappa Nagarahalli
2019-03-29 19:25         ` Eads, Gage
2019-03-06 14:45     ` [PATCH v3 6/8] stack: add C11 atomic implementation Gage Eads
2019-03-14  8:04       ` Olivier Matz
2019-03-28 23:27       ` Honnappa Nagarahalli
2019-03-29 19:24         ` Eads, Gage
2019-04-01  0:06           ` Eads, Gage
2019-04-01 19:06             ` Honnappa Nagarahalli
2019-04-01 20:21               ` Eads, Gage
2019-03-06 14:45     ` [PATCH v3 7/8] test/stack: add lock-free stack tests Gage Eads
2019-03-06 14:45     ` [PATCH v3 8/8] mempool/stack: add lock-free stack mempool handler Gage Eads
2019-03-28 18:00     ` [PATCH v4 0/8] Add stack library and new " Gage Eads
2019-03-28 18:00       ` [PATCH v4 1/8] stack: introduce rte stack library Gage Eads
2019-03-28 18:00       ` [PATCH v4 2/8] mempool/stack: convert mempool to use rte stack Gage Eads
2019-03-28 18:00       ` [PATCH v4 3/8] test/stack: add stack test Gage Eads
2019-03-28 18:00       ` [PATCH v4 4/8] test/stack: add stack perf test Gage Eads
2019-03-28 18:00       ` [PATCH v4 5/8] stack: add lock-free stack implementation Gage Eads
2019-03-28 18:00       ` [PATCH v4 6/8] stack: add C11 atomic implementation Gage Eads
2019-03-28 18:00       ` [PATCH v4 7/8] test/stack: add lock-free stack tests Gage Eads
2019-03-28 18:00       ` [PATCH v4 8/8] mempool/stack: add lock-free stack mempool handler Gage Eads
2019-04-01  0:12       ` [PATCH v5 0/8] Add stack library and new " Gage Eads
2019-04-01  0:12         ` [PATCH v5 1/8] stack: introduce rte stack library Gage Eads
2019-04-01  0:12         ` [PATCH v5 2/8] mempool/stack: convert mempool to use rte stack Gage Eads
2019-04-01  0:12         ` [PATCH v5 3/8] test/stack: add stack test Gage Eads
2019-04-01  0:12         ` [PATCH v5 4/8] test/stack: add stack perf test Gage Eads
2019-04-01  0:12         ` [PATCH v5 5/8] stack: add lock-free stack implementation Gage Eads
2019-04-01 18:08           ` Honnappa Nagarahalli
2019-04-01  0:12         ` [PATCH v5 6/8] stack: add C11 atomic implementation Gage Eads
2019-04-01  0:12         ` [PATCH v5 7/8] test/stack: add lock-free stack tests Gage Eads
2019-04-01  0:12         ` [PATCH v5 8/8] mempool/stack: add lock-free stack mempool handler Gage Eads
2019-04-01 21:14         ` [PATCH v6 0/8] Add stack library and new " Gage Eads
2019-04-01 21:14           ` [PATCH v6 1/8] stack: introduce rte stack library Gage Eads
2019-04-02 11:14             ` Honnappa Nagarahalli
2019-04-03 17:06               ` Thomas Monjalon
2019-04-03 17:13                 ` Eads, Gage
2019-04-03 17:23                   ` Thomas Monjalon
2019-04-01 21:14           ` [PATCH v6 2/8] mempool/stack: convert mempool to use rte stack Gage Eads
2019-04-01 21:14           ` [PATCH v6 3/8] test/stack: add stack test Gage Eads
2019-04-01 21:14           ` [PATCH v6 4/8] test/stack: add stack perf test Gage Eads
2019-04-01 21:14           ` [PATCH v6 5/8] stack: add lock-free stack implementation Gage Eads
2019-04-01 21:14           ` [PATCH v6 6/8] stack: add C11 atomic implementation Gage Eads
2019-04-02 11:11             ` Honnappa Nagarahalli
2019-04-01 21:14           ` [PATCH v6 7/8] test/stack: add lock-free stack tests Gage Eads
2019-04-01 21:14           ` [PATCH v6 8/8] mempool/stack: add lock-free stack mempool handler Gage Eads
2019-04-03 17:04           ` [PATCH v6 0/8] Add stack library and new " Thomas Monjalon
2019-04-03 17:10             ` Eads, Gage
2019-04-03 20:09           ` [PATCH v7 " Gage Eads
2019-04-03 20:09             ` [PATCH v7 1/8] stack: introduce rte stack library Gage Eads
2019-04-03 20:09             ` [PATCH v7 2/8] mempool/stack: convert mempool to use rte stack Gage Eads
2019-04-03 20:09             ` [PATCH v7 3/8] test/stack: add stack test Gage Eads
2019-04-03 20:09             ` [PATCH v7 4/8] test/stack: add stack perf test Gage Eads
2019-04-03 20:09             ` [PATCH v7 5/8] stack: add lock-free stack implementation Gage Eads
2019-04-03 20:09             ` [PATCH v7 6/8] stack: add C11 atomic implementation Gage Eads
2019-04-03 20:09             ` [PATCH v7 7/8] test/stack: add lock-free stack tests Gage Eads
2019-04-03 20:09             ` [PATCH v7 8/8] mempool/stack: add lock-free stack mempool handler Gage Eads
2019-04-03 20:39             ` [PATCH v7 0/8] Add stack library and new " Thomas Monjalon
2019-04-03 20:49               ` Eads, Gage
2019-04-03 20:50             ` [PATCH v8 " Gage Eads
2019-04-03 20:50               ` [PATCH v8 1/8] stack: introduce rte stack library Gage Eads
2019-04-03 20:50               ` [PATCH v8 2/8] mempool/stack: convert mempool to use rte stack Gage Eads
2019-04-03 20:50               ` [PATCH v8 3/8] test/stack: add stack test Gage Eads
2019-04-03 22:41                 ` Thomas Monjalon
2019-04-03 23:05                   ` Eads, Gage
2019-04-03 20:50               ` [PATCH v8 4/8] test/stack: add stack perf test Gage Eads
2019-04-03 20:50               ` [PATCH v8 5/8] stack: add lock-free stack implementation Gage Eads
2019-04-03 20:50               ` [PATCH v8 6/8] stack: add C11 atomic implementation Gage Eads
2019-04-03 20:50               ` [PATCH v8 7/8] test/stack: add lock-free stack tests Gage Eads
2019-04-03 20:50               ` [PATCH v8 8/8] mempool/stack: add lock-free stack mempool handler Gage Eads
2019-04-03 23:20               ` [PATCH v9 0/8] Add stack library and new " Gage Eads
2019-04-03 23:20                 ` [PATCH v9 1/8] stack: introduce rte stack library Gage Eads
2019-04-04 13:30                   ` Thomas Monjalon
2019-04-04 14:14                     ` Eads, Gage
2019-04-03 23:20                 ` [PATCH v9 2/8] mempool/stack: convert mempool to use rte stack Gage Eads
2019-04-03 23:20                 ` [PATCH v9 3/8] test/stack: add stack test Gage Eads
2019-04-04  7:34                   ` Thomas Monjalon
2019-04-03 23:20                 ` [PATCH v9 4/8] test/stack: add stack perf test Gage Eads
2019-04-03 23:20                 ` [PATCH v9 5/8] stack: add lock-free stack implementation Gage Eads
2019-04-03 23:20                 ` [PATCH v9 6/8] stack: add C11 atomic implementation Gage Eads
2019-04-03 23:20                 ` [PATCH v9 7/8] test/stack: add lock-free stack tests Gage Eads
2019-04-03 23:20                 ` [PATCH v9 8/8] mempool/stack: add lock-free stack mempool handler Gage Eads
2019-04-04 10:01                 ` [PATCH v10 0/8] Add stack library and new " Gage Eads
2019-04-04 10:01                   ` [PATCH v10 1/8] stack: introduce rte stack library Gage Eads
2019-04-04 10:01                   ` [PATCH v10 2/8] mempool/stack: convert mempool to use rte stack Gage Eads
2019-04-04 10:01                   ` [PATCH v10 3/8] test/stack: add stack test Gage Eads
2019-04-04 10:01                   ` [PATCH v10 4/8] test/stack: add stack perf test Gage Eads
2019-04-04 10:01                   ` [PATCH v10 5/8] stack: add lock-free stack implementation Gage Eads
2019-04-04 10:01                   ` [PATCH v10 6/8] stack: add C11 atomic implementation Gage Eads
2019-04-04 10:01                   ` [PATCH v10 7/8] test/stack: add lock-free stack tests Gage Eads
2019-04-04 10:01                   ` [PATCH v10 8/8] mempool/stack: add lock-free stack mempool handler Gage Eads
2019-04-04 15:42                   ` [PATCH v10 0/8] Add stack library and new " Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190306144559.391-4-gage.eads@intel.com \
    --to=gage.eads@intel.com \
    --cc=Honnappa.Nagarahalli@arm.com \
    --cc=arybchenko@solarflare.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=gavin.hu@arm.com \
    --cc=konstantin.ananyev@intel.com \
    --cc=nd@arm.com \
    --cc=olivier.matz@6wind.com \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.