test/stack: check lock-free implementation
authorGage Eads <gage.eads@intel.com>
Wed, 3 Apr 2019 23:20:19 +0000 (18:20 -0500)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 4 Apr 2019 20:06:16 +0000 (22:06 +0200)
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
app/test/test_stack.c
app/test/test_stack_perf.c

index 02eb788..867cc58 100644 (file)
@@ -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
index 6be2f87..e972a61 100644 (file)
@@ -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 @@ fail_test:
 }
 
 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);
index a44fbb7..ba27fbf 100644 (file)
@@ -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);