[dpdk-dev] examples: fix typdef in performance thread app
Checks
Commit Message
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: 116819b9ed0d ("examples/performance-thread: add lthread subsystem")
Signed-off-by: David Hunt <david.hunt@intel.com>
---
examples/performance-thread/common/lthread.c | 3 ++-
examples/performance-thread/common/lthread_api.h | 2 +-
examples/performance-thread/l3fwd-thread/main.c | 15 ++++++++-------
examples/performance-thread/pthread_shim/main.c | 4 ++--
.../pthread_shim/pthread_shim.c | 4 ++--
5 files changed, 15 insertions(+), 13 deletions(-)
Comments
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of David Hunt
> Sent: Thursday, May 10, 2018 6:31 AM
> To: dev@dpdk.org
> Cc: Mcnamara, John <john.mcnamara@intel.com>; Hunt, David
> <david.hunt@intel.com>
> Subject: [dpdk-dev] [PATCH] examples: fix typdef in performance thread app
>
> 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: 116819b9ed0d ("examples/performance-thread: add lthread subsystem")
>
> Signed-off-by: David Hunt <david.hunt@intel.com>
Missing "Cc: stable@dpdk.org"
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
10/05/2018 07:31, David Hunt:
> 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: 116819b9ed0d ("examples/performance-thread: add lthread subsystem")
>
> Signed-off-by: David Hunt <david.hunt@intel.com>
> ---
[...]
> -static void initial_lthread(void *args);
> -static void initial_lthread(void *args __attribute__((unused)))
> +static void *initial_lthread(void *args);
This declaration can be removed.
> +static void *initial_lthread(void *args __attribute__((unused)))
> {
The function must return a pointer (like NULL) at the end.
Please check that all threads are returning something.
Hi Thomas,
On 13/5/2018 10:37 PM, Thomas Monjalon wrote:
> 10/05/2018 07:31, David Hunt:
>> 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: 116819b9ed0d ("examples/performance-thread: add lthread subsystem")
>>
>> Signed-off-by: David Hunt <david.hunt@intel.com>
>> ---
> [...]
>> -static void initial_lthread(void *args);
>> -static void initial_lthread(void *args __attribute__((unused)))
>> +static void *initial_lthread(void *args);
> This declaration can be removed.
>
>> +static void *initial_lthread(void *args __attribute__((unused)))
>> {
> The function must return a pointer (like NULL) at the end.
>
> Please check that all threads are returning something.
>
Sure, Thomas, I've made updates based on your suggestions and pushed up
a v2.
Rgds,
Dave.
@@ -320,13 +320,14 @@ struct lthread *lthread_current(void)
/*
* Tasklet to cancel a thread
*/
-static void
+static void *
_cancel(void *arg)
{
struct lthread *lt = (struct lthread *) arg;
lt->state |= BIT(ST_LT_CANCELLED);
lthread_detach();
+ return NULL;
}
@@ -143,7 +143,7 @@ struct lthread_mutex;
struct lthread_condattr;
struct lthread_mutexattr;
-typedef void (*lthread_func_t) (void *);
+typedef void *(*lthread_func_t) (void *);
/*
* Define the size of stack for an lthread
@@ -1990,7 +1990,7 @@ cpu_load_collector(__rte_unused void *arg) {
*
* This loop is used to start empty scheduler on lcore.
*/
-static void
+static void *
lthread_null(__rte_unused void *args)
{
int lcore_id = rte_lcore_id();
@@ -2000,7 +2000,7 @@ lthread_null(__rte_unused void *args)
}
/* main processing loop */
-static void
+static void *
lthread_tx_per_ring(void *dummy)
{
int nb_rx;
@@ -2053,7 +2053,7 @@ lthread_tx_per_ring(void *dummy)
* This lthread is used to spawn one new lthread per ring from producers.
*
*/
-static void
+static void *
lthread_tx(void *args)
{
struct lthread *lt;
@@ -2100,7 +2100,7 @@ lthread_tx(void *args)
}
}
-static void
+static void *
lthread_rx(void *dummy)
{
int ret;
@@ -2124,7 +2124,7 @@ lthread_rx(void *dummy)
if (rx_conf->n_rx_queue == 0) {
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());
@@ -2204,8 +2204,9 @@ lthread_rx(void *dummy)
* This lthread loop spawns all rx and tx lthreads on master lcore
*/
-static void
-lthread_spawner(__rte_unused void *arg) {
+static void *
+lthread_spawner(__rte_unused void *arg)
+{
struct lthread *lt[MAX_THREAD];
int i;
int n_thread = 0;
@@ -119,8 +119,8 @@ void *helloworld_pthread(void *arg)
*/
__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);
+static void *initial_lthread(void *args __attribute__((unused)))
{
int lcore = (int) rte_lcore_id();
/*
@@ -365,7 +365,7 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
int
pthread_create(pthread_t *__restrict tid,
const pthread_attr_t *__restrict attr,
- void *(func) (void *),
+ lthread_func_t func,
void *__restrict arg)
{
if (override) {
@@ -390,7 +390,7 @@ pthread_create(pthread_t *__restrict tid,
}
}
return lthread_create((struct lthread **)tid, lcore,
- (void (*)(void *))func, arg);
+ func, arg);
}
return _sys_pthread_funcs.f_pthread_create(tid, attr, func, arg);
}