diff --git a/test/test/meson.build b/test/test/meson.build
index ba3cb6261..474611291 100644
--- a/test/test/meson.build
+++ b/test/test/meson.build
@@ -177,6 +177,7 @@ fast_parallel_test_names = [
         'sched_autotest',
         'spinlock_autotest',
         'stack_autotest',
+        'stack_nb_autotest',
         'string_autotest',
         'table_autotest',
         'tailq_autotest',
@@ -242,6 +243,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/test/test/test_stack.c b/test/test/test_stack.c
index 510c7aac1..729c25230 100644
--- a/test/test/test_stack.c
+++ b/test/test/test_stack.c
@@ -81,7 +81,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;
@@ -97,7 +97,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__);
@@ -162,18 +162,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__);
@@ -186,14 +186,14 @@ 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;
 
 	memset(name, 's', sizeof(name));
 
-	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__);
@@ -312,7 +312,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;
@@ -333,7 +333,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__);
@@ -368,9 +368,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)
@@ -379,16 +379,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_nb_stack(void)
+{
+	return __test_stack(STACK_F_NB);
+}
+
 REGISTER_TEST_COMMAND(stack_autotest, test_stack);
+REGISTER_TEST_COMMAND(stack_nb_autotest, test_nb_stack);
diff --git a/test/test/test_stack_perf.c b/test/test/test_stack_perf.c
index 484370d30..57a0e806b 100644
--- a/test/test/test_stack_perf.c
+++ b/test/test/test_stack_perf.c
@@ -297,14 +297,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__);
@@ -340,4 +340,17 @@ test_stack_perf(void)
 	return 0;
 }
 
+static int
+test_stack_perf(void)
+{
+	return __test_stack_perf(0);
+}
+
+static int
+test_nb_stack_perf(void)
+{
+	return __test_stack_perf(STACK_F_NB);
+}
+
 REGISTER_TEST_COMMAND(stack_perf_autotest, test_stack_perf);
+REGISTER_TEST_COMMAND(stack_nb_perf_autotest, test_nb_stack_perf);
