From: Ferruh Yigit <ferruh.yigit@intel.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH v2] eal: fix compile error for old glibc caused by pthread_setname_np()
Date: Wed, 25 Nov 2015 11:13:55 +0000 [thread overview]
Message-ID: <1448450035-23991-1-git-send-email-ferruh.yigit@intel.com> (raw)
In-Reply-To: <20151124184755.GA26521@sivlogin002.ir.intel.com>
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/include/rte_lcore.h | 20 ++++++++++++++++++++
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, 27 insertions(+), 7 deletions(-)
diff --git a/examples/tep_termination/main.c b/examples/tep_termination/main.c
index 2b67e64..f97d552 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 c081b18..9bfda6d 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 3fcc138..ca725f2 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 e03264e..25460b9 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 06536f2..635ec36 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 95beb4c..470d6a1 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 277565d..d9188fd 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 e0642de..9ceff33 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.5.0
next prev parent reply other threads:[~2015-11-25 11:14 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-18 13:32 [dpdk-dev] Compile errors with libc < 2.12 Ferruh Yigit
2015-11-18 14:24 ` Thomas Monjalon
2015-11-19 11:22 ` [dpdk-dev] [PATCH] Revert "eal: set name to threads" Ferruh Yigit
2015-11-19 11:49 ` Panu Matilainen
2015-11-19 12:32 ` Thomas Monjalon
2015-11-19 13:39 ` Ferruh Yigit
2015-11-19 16:59 ` Ferruh Yigit
2015-11-19 17:44 ` [dpdk-dev] [PATCH] eal: fix compile error for old glibc caused by pthread_setname_np() Ferruh Yigit
2015-11-20 12:21 ` [dpdk-dev] [PATCH] eal: fix compile error for old glibc caused by pthread_setname_np()# Bruce Richardson
2015-11-24 14:26 ` Ferruh Yigit
2015-11-24 17:54 ` [dpdk-dev] [PATCH] eal: fix compile error for old glibc caused by pthread_setname_np() Thomas Monjalon
2015-11-24 18:47 ` Ferruh Yigit
2015-11-25 11:13 ` Ferruh Yigit [this message]
2015-11-25 11:18 ` [dpdk-dev] [PATCH v2] " Thomas Monjalon
2015-11-25 11:24 ` Ferruh Yigit
2015-11-25 11:30 ` Thomas Monjalon
2015-11-25 13:41 ` Thomas Monjalon
2015-11-25 13:51 ` Roger B. Melton
2015-11-25 14:03 ` Thomas Monjalon
2015-11-25 14:20 ` Roger B. Melton
2015-11-19 11:23 ` [dpdk-dev] [PATCH] eal: fix compile error for old glibc caused by CLOCK_MONOTONIC_RAW Ferruh Yigit
2015-11-20 17:02 ` Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1448450035-23991-1-git-send-email-ferruh.yigit@intel.com \
--to=ferruh.yigit@intel.com \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).