[dpdk-dev] eal: fix compile error for old glibc caused by pthread_setname_np()
Commit Message
Fixes: 67b6d3039e9e ("eal: set name to threads")
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.
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
examples/tep_termination/main.c | 2 +-
examples/vhost/main.c | 2 +-
examples/vhost_xen/main.c | 2 +-
lib/librte_eal/common/eal_thread.h | 6 ++++++
lib/librte_eal/linuxapp/eal/eal.c | 2 +-
lib/librte_eal/linuxapp/eal/eal_interrupts.c | 2 +-
lib/librte_eal/linuxapp/eal/eal_pci_vfio_mp_sync.c | 2 +-
lib/librte_eal/linuxapp/eal/eal_timer.c | 2 +-
8 files changed, 13 insertions(+), 7 deletions(-)
Comments
On Thu, Nov 19, 2015 at 05:44:26PM +0000, Ferruh Yigit wrote:
> Fixes: 67b6d3039e9e ("eal: set name to threads")
>
> 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.
>
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> examples/tep_termination/main.c | 2 +-
> examples/vhost/main.c | 2 +-
> examples/vhost_xen/main.c | 2 +-
> lib/librte_eal/common/eal_thread.h | 6 ++++++
> lib/librte_eal/linuxapp/eal/eal.c | 2 +-
> lib/librte_eal/linuxapp/eal/eal_interrupts.c | 2 +-
> lib/librte_eal/linuxapp/eal/eal_pci_vfio_mp_sync.c | 2 +-
> lib/librte_eal/linuxapp/eal/eal_timer.c | 2 +-
> 8 files changed, 13 insertions(+), 7 deletions(-)
>
I only see changes to linux files above. Does this not also have an implication
for bsd too?
/Bruce
2015-11-19 17:44, Ferruh Yigit:
> examples/tep_termination/main.c | 2 +-
> examples/vhost/main.c | 2 +-
> examples/vhost_xen/main.c | 2 +-
> lib/librte_eal/common/eal_thread.h | 6 ++++++
It cannot compile because eal_thread.h is not part of the public API
so not included in the examples.
Please could you move it in lib/librte_eal/common/include?
An idea of the filename it should be?
@@ -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");
}
@@ -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");
@@ -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");
@@ -36,6 +36,12 @@
#include <rte_lcore.h>
+#if __GLIBC_PREREQ(2, 12)
+#define rte_thread_setname(...) pthread_setname_np(__VA_ARGS__)
+#else
+#define rte_thread_setname(...) 0
+#endif
+
/**
* basic loop of thread, called for each thread by eal_init().
*
@@ -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,
@@ -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");
@@ -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");
@@ -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");