eal: fix thread naming on FreeBSD
authorThomas Monjalon <thomas.monjalon@6wind.com>
Fri, 17 Jun 2016 12:48:16 +0000 (14:48 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Fri, 17 Jun 2016 16:04:22 +0000 (18:04 +0200)
rte_thread_setname was a macro defined only for Linux.
The function rte_thread_setname() can now be used on FreeBSD
as well on Linux.
It is required to build librte_pdump.

The macro was 0 for old glibc. The function is now returning -1.
The related logs are decreased from error to debug level because
it is not an important failure, just a debug inconvenience.

Fixes: 278f945402c5 ("pdump: add new library for packet capture")

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: David Marchand <david.marchand@6wind.com>
13 files changed:
examples/tep_termination/main.c
examples/vhost/main.c
examples/vhost_xen/main.c
lib/librte_eal/bsdapp/eal/eal.c
lib/librte_eal/bsdapp/eal/eal_thread.c
lib/librte_eal/bsdapp/eal/rte_eal_version.map
lib/librte_eal/common/include/rte_lcore.h
lib/librte_eal/linuxapp/eal/eal.c
lib/librte_eal/linuxapp/eal/eal_interrupts.c
lib/librte_eal/linuxapp/eal/eal_pci_vfio_mp_sync.c
lib/librte_eal/linuxapp/eal/eal_thread.c
lib/librte_eal/linuxapp/eal/eal_timer.c
lib/librte_eal/linuxapp/eal/rte_eal_version.map

index b8297dd..aa67a6b 100644 (file)
@@ -1246,7 +1246,7 @@ main(int argc, char *argv[])
                snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "print-stats");
                ret = rte_thread_setname(tid, thread_name);
                if (ret != 0)
-                       RTE_LOG(ERR, VHOST_CONFIG, "Cannot set print-stats name\n");
+                       RTE_LOG(DEBUG, VHOST_CONFIG, "Cannot set print-stats name\n");
        }
 
        /* Launch all data cores. */
index 665886e..f849571 100644 (file)
@@ -1474,7 +1474,7 @@ main(int argc, char *argv[])
                snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "print-stats");
                ret = rte_thread_setname(tid, thread_name);
                if (ret != 0)
-                       RTE_LOG(ERR, VHOST_CONFIG,
+                       RTE_LOG(DEBUG, VHOST_CONFIG,
                                "Cannot set print-stats name\n");
        }
 
index 2b04c95..2e40357 100644 (file)
@@ -1494,7 +1494,7 @@ main(int argc, char *argv[])
                snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "print-xen-stats");
                ret = rte_thread_setname(tid, thread_name);
                if (ret != 0)
-                       RTE_LOG(ERR, VHOST_CONFIG,
+                       RTE_LOG(DEBUG, VHOST_CONFIG,
                                "Cannot set print-stats name\n");
        }
 
index 06bfd4e..a0c8f8c 100644 (file)
@@ -605,7 +605,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);
-               pthread_set_name_np(lcore_config[i].thread_id, thread_name);
+               rte_thread_setname(lcore_config[i].thread_id, thread_name);
        }
 
        /*
index 9a03437..1b8cd8a 100644 (file)
@@ -199,3 +199,10 @@ int rte_sys_gettid(void)
        thr_self(&lwpid);
        return (int)lwpid;
 }
+
+int rte_thread_setname(pthread_t id, const char *name)
+{
+       /* this BSD function returns no error */
+       pthread_set_name_np(id, name);
+       return 0;
+}
index 97d091b..3b4dd3b 100644 (file)
@@ -157,5 +157,6 @@ DPDK_16.07 {
 
        pci_get_sysfs_path;
        rte_keepalive_register_relay_callback;
+       rte_thread_setname;
 
 } DPDK_16.04;
index ac15130..fe7b586 100644 (file)
@@ -250,23 +250,16 @@ 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.
+ * @note It fails with glibc < 2.12.
  *
- * This macro only used for Linux, BSD does direct libc call.
- * BSD libc version of function is `pthread_set_name_np()`.
+ * @param id
+ *   Thread id.
+ * @param name
+ *   Thread name to set.
+ * @return
+ *   On success, return 0; otherwise return a negative value.
  */
-#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
+int rte_thread_setname(pthread_t id, const char *name);
 
 #ifdef __cplusplus
 }
index bba8fea..4f22c18 100644 (file)
@@ -859,7 +859,7 @@ rte_eal_init(int argc, char **argv)
                ret = rte_thread_setname(lcore_config[i].thread_id,
                                                thread_name);
                if (ret != 0)
-                       RTE_LOG(ERR, EAL,
+                       RTE_LOG(DEBUG, EAL,
                                "Cannot set name for lcore thread\n");
        }
 
index a9af396..47a3b20 100644 (file)
@@ -887,7 +887,7 @@ rte_eal_intr_init(void)
                        "eal-intr-thread");
                ret_1 = rte_thread_setname(intr_thread, thread_name);
                if (ret_1 != 0)
-                       RTE_LOG(ERR, EAL,
+                       RTE_LOG(DEBUG, EAL,
                        "Failed to set thread name for interrupt handling\n");
        }
 
index 26d966e..d54ded8 100644 (file)
@@ -399,7 +399,7 @@ pci_vfio_mp_sync_setup(void)
        snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "pci-vfio-sync");
        ret = rte_thread_setname(socket_thread, thread_name);
        if (ret)
-               RTE_LOG(ERR, EAL,
+               RTE_LOG(DEBUG, EAL,
                        "Failed to set thread name for secondary processes!\n");
 
        return 0;
index 18bd8e0..8c3bf03 100644 (file)
@@ -197,3 +197,14 @@ int rte_sys_gettid(void)
 {
        return (int)syscall(SYS_gettid);
 }
+
+int rte_thread_setname(pthread_t id, const char *name)
+{
+       int ret = -1;
+#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
+#if __GLIBC_PREREQ(2, 12)
+       ret = pthread_setname_np(id, name);
+#endif
+#endif
+       return ret;
+}
index f2abb7b..afa32f5 100644 (file)
@@ -222,8 +222,8 @@ rte_eal_hpet_init(int make_default)
        snprintf(thread_name, RTE_MAX_THREAD_NAME_LEN, "hpet-msb-inc");
        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");
+               RTE_LOG(DEBUG, EAL,
+                       "Cannot set HPET timer thread name!\n");
 
        if (make_default)
                eal_timer_source = EAL_TIMER_HPET;
index 4874c92..7330a46 100644 (file)
@@ -160,5 +160,6 @@ DPDK_16.07 {
 
        pci_get_sysfs_path;
        rte_keepalive_register_relay_callback;
+       rte_thread_setname;
 
 } DPDK_16.04;