test: test control thread creation
authorHonnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Thu, 21 Oct 2021 21:32:21 +0000 (16:32 -0500)
committerDavid Marchand <david.marchand@redhat.com>
Mon, 25 Oct 2021 19:44:47 +0000 (21:44 +0200)
Add a testcase to test launching of control threads.

Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
app/test/test_lcores.c

index 19a7ab9..35c47d5 100644 (file)
@@ -340,6 +340,44 @@ error:
        return -1;
 }
 
+static void *ctrl_thread_loop(void *arg)
+{
+       struct thread_context *t = arg;
+
+       printf("Control thread running successfully\n");
+
+       /* Set the thread state to DONE */
+       t->state = DONE;
+
+       return NULL;
+}
+
+static int
+test_ctrl_thread(void)
+{
+       struct thread_context ctrl_thread_context;
+       struct thread_context *t;
+
+       /* Create one control thread */
+       t = &ctrl_thread_context;
+       t->state = INIT;
+       if (rte_ctrl_thread_create(&t->id, "test_ctrl_threads",
+                                       NULL, ctrl_thread_loop, t) != 0)
+               return -1;
+
+       /* Wait till the control thread exits.
+        * This also acts as the barrier such that the memory operations
+        * in control thread are visible to this thread.
+        */
+       pthread_join(t->id, NULL);
+
+       /* Check if the control thread set the correct state */
+       if (t->state != DONE)
+               return -1;
+
+       return 0;
+}
+
 static int
 test_lcores(void)
 {
@@ -367,6 +405,9 @@ test_lcores(void)
        if (test_non_eal_lcores_callback(eal_threads_count) < 0)
                return TEST_FAILED;
 
+       if (test_ctrl_thread() < 0)
+               return TEST_FAILED;
+
        return TEST_SUCCESS;
 }