examples/performance-thread: fix build on FreeBSD
This set of sample apps did not compile on FreeBSD due to use of a number of Linux/glibc-specific APIs, or APIs which existed in different headers on FreeBSD. Specifically, the following APIs has problems: * sched_getcpu() is a glibc extension, so use rte_lcore_id() on BSD * pthread_yield() returns int on Linux, but void on FreeBSD, so we have to create two slightly different copies of the function. * the type for managing cpu sets is cpuset_t on FreeBSD rather than cpu_set_t as on Linux, so use rte_cpuset_t from rte_lcore.h. * APIs for managing cpu affinity are in pthread_np.h on FreeBSD, rather than in pthread.h, also fixed by including rte_lcore.h Fixes:433ba6228f
("examples/performance-thread: add pthread_shim app") Fixes:d48415e1fe
("examples/performance-thread: add l3fwd-thread app") Cc: stable@dpdk.org Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
This commit is contained in:
parent
b2f4f2e2a6
commit
4cde45f36f
@ -90,6 +90,10 @@
|
||||
#define APP_LOOKUP_METHOD APP_LOOKUP_LPM
|
||||
#endif
|
||||
|
||||
#ifndef __GLIBC__ /* sched_getcpu() is glibc specific */
|
||||
#define sched_getcpu() rte_lcore_id()
|
||||
#endif
|
||||
|
||||
static int
|
||||
check_ptype(int portid)
|
||||
{
|
||||
|
@ -59,6 +59,10 @@
|
||||
#define DEBUG_APP 0
|
||||
#define HELLOW_WORLD_MAX_LTHREADS 10
|
||||
|
||||
#ifndef __GLIBC__ /* sched_getcpu() is glibc-specific */
|
||||
#define sched_getcpu() rte_lcore_id()
|
||||
#endif
|
||||
|
||||
__thread int print_count;
|
||||
__thread pthread_mutex_t print_lock;
|
||||
|
||||
@ -175,12 +179,12 @@ static void initial_lthread(void *args __attribute__((unused)))
|
||||
* use an attribute to pass the desired lcore
|
||||
*/
|
||||
pthread_attr_t attr;
|
||||
cpu_set_t cpuset;
|
||||
rte_cpuset_t cpuset;
|
||||
|
||||
CPU_ZERO(&cpuset);
|
||||
CPU_SET(lcore, &cpuset);
|
||||
pthread_attr_init(&attr);
|
||||
pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpuset);
|
||||
pthread_attr_setaffinity_np(&attr, sizeof(rte_cpuset_t), &cpuset);
|
||||
|
||||
/* create the thread */
|
||||
pthread_create(&tid[i], &attr, helloworld_pthread, (void *) i);
|
||||
|
@ -159,7 +159,7 @@ int (*f_pthread_setschedparam)
|
||||
int (*f_pthread_yield)
|
||||
(void);
|
||||
int (*f_pthread_setaffinity_np)
|
||||
(pthread_t thread, size_t cpusetsize, const cpu_set_t *cpuset);
|
||||
(pthread_t thread, size_t cpusetsize, const rte_cpuset_t *cpuset);
|
||||
int (*f_nanosleep)
|
||||
(const struct timespec *req, struct timespec *rem);
|
||||
} _sys_pthread_funcs = {
|
||||
@ -390,11 +390,11 @@ pthread_create(pthread_t *__restrict tid,
|
||||
|
||||
if (attr != NULL) {
|
||||
/* determine CPU being requested */
|
||||
cpu_set_t cpuset;
|
||||
rte_cpuset_t cpuset;
|
||||
|
||||
CPU_ZERO(&cpuset);
|
||||
pthread_attr_getaffinity_np(attr,
|
||||
sizeof(cpu_set_t),
|
||||
sizeof(rte_cpuset_t),
|
||||
&cpuset);
|
||||
|
||||
if (CPU_COUNT(&cpuset) != 1)
|
||||
@ -576,15 +576,26 @@ int pthread_rwlock_wrlock(pthread_rwlock_t *a)
|
||||
return _sys_pthread_funcs.f_pthread_rwlock_wrlock(a);
|
||||
}
|
||||
|
||||
int pthread_yield(void)
|
||||
#ifdef RTE_EXEC_ENV_LINUXAPP
|
||||
int
|
||||
pthread_yield(void)
|
||||
{
|
||||
if (override) {
|
||||
lthread_yield();
|
||||
return 0;
|
||||
}
|
||||
return _sys_pthread_funcs.f_pthread_yield();
|
||||
|
||||
}
|
||||
#else
|
||||
void
|
||||
pthread_yield(void)
|
||||
{
|
||||
if (override)
|
||||
lthread_yield();
|
||||
else
|
||||
_sys_pthread_funcs.f_pthread_yield();
|
||||
}
|
||||
#endif
|
||||
|
||||
pthread_t pthread_self(void)
|
||||
{
|
||||
@ -686,7 +697,7 @@ int nanosleep(const struct timespec *req, struct timespec *rem)
|
||||
|
||||
int
|
||||
pthread_setaffinity_np(pthread_t thread, size_t cpusetsize,
|
||||
const cpu_set_t *cpuset)
|
||||
const rte_cpuset_t *cpuset)
|
||||
{
|
||||
if (override) {
|
||||
/* we only allow affinity with a single CPU */
|
||||
|
@ -33,7 +33,8 @@
|
||||
|
||||
#ifndef _PTHREAD_SHIM_H_
|
||||
#define _PTHREAD_SHIM_H_
|
||||
#include <pthread.h>
|
||||
|
||||
#include <rte_lcore.h>
|
||||
|
||||
/*
|
||||
* This pthread shim is an example that demonstrates how legacy code
|
||||
|
Loading…
Reference in New Issue
Block a user