From badb3688ffa8e9731770e686ba84123783060c1b Mon Sep 17 00:00:00 2001 From: Ferruh Yigit Date: Wed, 25 Nov 2015 11:13:55 +0000 Subject: [PATCH] eal/linux: fix build with glibc < 2.12 pthread_setname_np() function added in glibc 2.12, using this function in older glibc versions cause compile error: error: implicit declaration of function "pthread_setname_np" This patch adds "rte_thread_setname" macro and set it according glibc >= 2.12 check, thread naming disabled for older glibc versions, glibc versions that support "pthread_setname_np" will keep using this function. Fixes: 67b6d3039e9e ("eal: set name to threads") Signed-off-by: Ferruh Yigit --- examples/tep_termination/main.c | 2 +- examples/vhost/main.c | 2 +- examples/vhost_xen/main.c | 2 +- lib/librte_eal/common/include/rte_lcore.h | 20 +++++++++++++++++++ lib/librte_eal/linuxapp/eal/eal.c | 2 +- lib/librte_eal/linuxapp/eal/eal_interrupts.c | 2 +- .../linuxapp/eal/eal_pci_vfio_mp_sync.c | 2 +- lib/librte_eal/linuxapp/eal/eal_timer.c | 2 +- 8 files changed, 27 insertions(+), 7 deletions(-) diff --git a/examples/tep_termination/main.c b/examples/tep_termination/main.c index 2b67e64a49..f97d552a44 100644 --- a/examples/tep_termination/main.c +++ b/examples/tep_termination/main.c @@ -1249,7 +1249,7 @@ main(int argc, char *argv[]) if (ret != 0) rte_exit(EXIT_FAILURE, "Cannot create print-stats thread\n"); snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "print-stats"); - ret = pthread_setname_np(tid, thread_name); + ret = rte_thread_setname(tid, thread_name); if (ret != 0) RTE_LOG(ERR, VHOST_CONFIG, "Cannot set print-stats name\n"); } diff --git a/examples/vhost/main.c b/examples/vhost/main.c index c081b18044..9bfda6d444 100644 --- a/examples/vhost/main.c +++ b/examples/vhost/main.c @@ -3027,7 +3027,7 @@ main(int argc, char *argv[]) /* Set thread_name for aid in debugging. */ snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "print-stats"); - ret = pthread_setname_np(tid, thread_name); + ret = rte_thread_setname(tid, thread_name); if (ret != 0) RTE_LOG(ERR, VHOST_CONFIG, "Cannot set print-stats name\n"); diff --git a/examples/vhost_xen/main.c b/examples/vhost_xen/main.c index 3fcc138d27..ca725f2b3c 100644 --- a/examples/vhost_xen/main.c +++ b/examples/vhost_xen/main.c @@ -1510,7 +1510,7 @@ main(int argc, char *argv[]) /* Set thread_name for aid in debugging. */ snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "print-xen-stats"); - ret = pthread_setname_np(tid, thread_name); + ret = rte_thread_setname(tid, thread_name); if (ret != 0) RTE_LOG(ERR, VHOST_CONFIG, "Cannot set print-stats name\n"); diff --git a/lib/librte_eal/common/include/rte_lcore.h b/lib/librte_eal/common/include/rte_lcore.h index e03264e35f..25460b92fc 100644 --- a/lib/librte_eal/common/include/rte_lcore.h +++ b/lib/librte_eal/common/include/rte_lcore.h @@ -247,6 +247,26 @@ int rte_thread_set_affinity(rte_cpuset_t *cpusetp); */ void rte_thread_get_affinity(rte_cpuset_t *cpusetp); +/** + * Set thread names. + * + * Macro to wrap `pthread_setname_np()` with a glibc version check. + * Only glibc >= 2.12 supports this feature. + * + * This macro only used for Linux, BSD does direct libc call. + * BSD libc version of function is `pthread_set_name_np()`. + */ +#if defined(__DOXYGEN__) +#define rte_thread_setname(...) pthread_setname_np(__VA_ARGS__) +#endif + +#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) +#if __GLIBC_PREREQ(2, 12) +#define rte_thread_setname(...) pthread_setname_np(__VA_ARGS__) +#else +#define rte_thread_setname(...) 0 +#endif +#endif #ifdef __cplusplus } diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index 06536f298f..635ec36324 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -859,7 +859,7 @@ rte_eal_init(int argc, char **argv) /* Set thread_name for aid in debugging. */ snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "lcore-slave-%d", i); - ret = pthread_setname_np(lcore_config[i].thread_id, + ret = rte_thread_setname(lcore_config[i].thread_id, thread_name); if (ret != 0) RTE_LOG(ERR, EAL, diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c index 95beb4c709..470d6a1f57 100644 --- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c +++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c @@ -887,7 +887,7 @@ rte_eal_intr_init(void) /* Set thread_name for aid in debugging. */ snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "eal-intr-thread"); - ret_1 = pthread_setname_np(intr_thread, thread_name); + ret_1 = rte_thread_setname(intr_thread, thread_name); if (ret_1 != 0) RTE_LOG(ERR, EAL, "Failed to set thread name for interrupt handling\n"); diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_vfio_mp_sync.c b/lib/librte_eal/linuxapp/eal/eal_pci_vfio_mp_sync.c index 277565d38f..d9188fdeee 100644 --- a/lib/librte_eal/linuxapp/eal/eal_pci_vfio_mp_sync.c +++ b/lib/librte_eal/linuxapp/eal/eal_pci_vfio_mp_sync.c @@ -394,7 +394,7 @@ pci_vfio_mp_sync_setup(void) /* Set thread_name for aid in debugging. */ snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "pci-vfio-sync"); - ret = pthread_setname_np(socket_thread, thread_name); + ret = rte_thread_setname(socket_thread, thread_name); if (ret) RTE_LOG(ERR, EAL, "Failed to set thread name for secondary processes!\n"); diff --git a/lib/librte_eal/linuxapp/eal/eal_timer.c b/lib/librte_eal/linuxapp/eal/eal_timer.c index e0642dee3a..9ceff3301b 100644 --- a/lib/librte_eal/linuxapp/eal/eal_timer.c +++ b/lib/librte_eal/linuxapp/eal/eal_timer.c @@ -219,7 +219,7 @@ rte_eal_hpet_init(int make_default) * Set thread_name for aid in debugging. */ snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "hpet-msb-inc"); - ret = pthread_setname_np(msb_inc_thread_id, thread_name); + ret = rte_thread_setname(msb_inc_thread_id, thread_name); if (ret != 0) RTE_LOG(ERR, EAL, "ERROR: Cannot set HPET timer thread name!\n"); -- 2.20.1