examples/performance-thread: fix return type of threads

The function pthread_create() expects void *(*func) (void *)
for function pointer, however, lthread_func_t was defined as
void (*func) (void *), so now gcc 8.1 warns that the cast is
incorrect, causing a compilation failure. This patch changes
the declaration of lthread_func_t from returning a void to
returning a void*, and then changes the sample app in the
relevant places that are affected by the typedef change.

Fixes: 116819b9ed ("examples/performance-thread: add lthread subsystem")
Cc: stable@dpdk.org

Signed-off-by: David Hunt <david.hunt@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
This commit is contained in:
David Hunt 2018-05-14 03:53:15 +01:00 committed by Thomas Monjalon
parent a68bc62fd1
commit 803ee2ebd3
5 changed files with 20 additions and 15 deletions

View File

@ -320,13 +320,14 @@ struct lthread *lthread_current(void)
/* /*
* Tasklet to cancel a thread * Tasklet to cancel a thread
*/ */
static void static void *
_cancel(void *arg) _cancel(void *arg)
{ {
struct lthread *lt = (struct lthread *) arg; struct lthread *lt = (struct lthread *) arg;
lt->state |= BIT(ST_LT_CANCELLED); lt->state |= BIT(ST_LT_CANCELLED);
lthread_detach(); lthread_detach();
return NULL;
} }

View File

@ -143,7 +143,7 @@ struct lthread_mutex;
struct lthread_condattr; struct lthread_condattr;
struct lthread_mutexattr; struct lthread_mutexattr;
typedef void (*lthread_func_t) (void *); typedef void *(*lthread_func_t) (void *);
/* /*
* Define the size of stack for an lthread * Define the size of stack for an lthread

View File

@ -1990,17 +1990,18 @@ cpu_load_collector(__rte_unused void *arg) {
* *
* This loop is used to start empty scheduler on lcore. * This loop is used to start empty scheduler on lcore.
*/ */
static void static void *
lthread_null(__rte_unused void *args) lthread_null(__rte_unused void *args)
{ {
int lcore_id = rte_lcore_id(); int lcore_id = rte_lcore_id();
RTE_LOG(INFO, L3FWD, "Starting scheduler on lcore %d.\n", lcore_id); RTE_LOG(INFO, L3FWD, "Starting scheduler on lcore %d.\n", lcore_id);
lthread_exit(NULL); lthread_exit(NULL);
return NULL;
} }
/* main processing loop */ /* main processing loop */
static void static void *
lthread_tx_per_ring(void *dummy) lthread_tx_per_ring(void *dummy)
{ {
int nb_rx; int nb_rx;
@ -2045,6 +2046,7 @@ lthread_tx_per_ring(void *dummy)
lthread_cond_wait(ready, 0); lthread_cond_wait(ready, 0);
} }
return NULL;
} }
/* /*
@ -2053,7 +2055,7 @@ lthread_tx_per_ring(void *dummy)
* This lthread is used to spawn one new lthread per ring from producers. * This lthread is used to spawn one new lthread per ring from producers.
* *
*/ */
static void static void *
lthread_tx(void *args) lthread_tx(void *args)
{ {
struct lthread *lt; struct lthread *lt;
@ -2098,9 +2100,10 @@ lthread_tx(void *args)
} }
} }
return NULL;
} }
static void static void *
lthread_rx(void *dummy) lthread_rx(void *dummy)
{ {
int ret; int ret;
@ -2124,7 +2127,7 @@ lthread_rx(void *dummy)
if (rx_conf->n_rx_queue == 0) { if (rx_conf->n_rx_queue == 0) {
RTE_LOG(INFO, L3FWD, "lcore %u has nothing to do\n", rte_lcore_id()); RTE_LOG(INFO, L3FWD, "lcore %u has nothing to do\n", rte_lcore_id());
return; return NULL;
} }
RTE_LOG(INFO, L3FWD, "Entering main Rx loop on lcore %u\n", rte_lcore_id()); RTE_LOG(INFO, L3FWD, "Entering main Rx loop on lcore %u\n", rte_lcore_id());
@ -2196,6 +2199,7 @@ lthread_rx(void *dummy)
lthread_yield(); lthread_yield();
} }
} }
return NULL;
} }
/* /*
@ -2204,8 +2208,9 @@ lthread_rx(void *dummy)
* This lthread loop spawns all rx and tx lthreads on master lcore * This lthread loop spawns all rx and tx lthreads on master lcore
*/ */
static void static void *
lthread_spawner(__rte_unused void *arg) { lthread_spawner(__rte_unused void *arg)
{
struct lthread *lt[MAX_THREAD]; struct lthread *lt[MAX_THREAD];
int i; int i;
int n_thread = 0; int n_thread = 0;
@ -2246,6 +2251,7 @@ lthread_spawner(__rte_unused void *arg) {
for (i = 0; i < n_thread; i++) for (i = 0; i < n_thread; i++)
lthread_join(lt[i], NULL); lthread_join(lt[i], NULL);
return NULL;
} }
/* /*

View File

@ -119,8 +119,7 @@ void *helloworld_pthread(void *arg)
*/ */
__thread pthread_t tid[HELLOW_WORLD_MAX_LTHREADS]; __thread pthread_t tid[HELLOW_WORLD_MAX_LTHREADS];
static void initial_lthread(void *args); static void *initial_lthread(void *args __attribute__((unused)))
static void initial_lthread(void *args __attribute__((unused)))
{ {
int lcore = (int) rte_lcore_id(); int lcore = (int) rte_lcore_id();
/* /*
@ -195,6 +194,7 @@ static void initial_lthread(void *args __attribute__((unused)))
/* shutdown the lthread scheduler */ /* shutdown the lthread scheduler */
lthread_scheduler_shutdown(rte_lcore_id()); lthread_scheduler_shutdown(rte_lcore_id());
lthread_detach(); lthread_detach();
return NULL;
} }
@ -205,8 +205,6 @@ static void initial_lthread(void *args __attribute__((unused)))
* in the core mask * in the core mask
*/ */
static int static int
lthread_scheduler(void *args);
static int
lthread_scheduler(void *args __attribute__((unused))) lthread_scheduler(void *args __attribute__((unused)))
{ {
/* create initial thread */ /* create initial thread */

View File

@ -365,7 +365,7 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
int int
pthread_create(pthread_t *__restrict tid, pthread_create(pthread_t *__restrict tid,
const pthread_attr_t *__restrict attr, const pthread_attr_t *__restrict attr,
void *(func) (void *), lthread_func_t func,
void *__restrict arg) void *__restrict arg)
{ {
if (override) { if (override) {
@ -390,7 +390,7 @@ pthread_create(pthread_t *__restrict tid,
} }
} }
return lthread_create((struct lthread **)tid, lcore, return lthread_create((struct lthread **)tid, lcore,
(void (*)(void *))func, arg); func, arg);
} }
return _sys_pthread_funcs.f_pthread_create(tid, attr, func, arg); return _sys_pthread_funcs.f_pthread_create(tid, attr, func, arg);
} }