From patchwork Fri Jun 17 16:02:20 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 13996 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 46162CF17; Fri, 17 Jun 2016 18:02:26 +0200 (CEST) Received: from mail-wm0-f41.google.com (mail-wm0-f41.google.com [74.125.82.41]) by dpdk.org (Postfix) with ESMTP id 95F25CF15 for ; Fri, 17 Jun 2016 18:02:24 +0200 (CEST) Received: by mail-wm0-f41.google.com with SMTP id m124so5654160wme.1 for ; Fri, 17 Jun 2016 09:02:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=3l2pGLNy1syOjcF/M0OOPgBNYHnRnVXVj5dhzNhJtRg=; b=yoSaGh+FgZYGCzEGRsicJDIVjC4Na4NxEKeqYuswL9vPCpaYCOquoiM53woSasO9gr SjbzmQLIuSy33hUFTKDtYYwVx+JJYin7uquowMGiwXw2+rHg/W/bej12SZtGosVazZ6/ Un7GifiKnS6rcGKH0yX3Pc2Ex8FHmZZ8ck03+BxbzdolsovRcFXf+KUIXAs/yirZsOBi 7tuQ5hmsa03qdA8iNgpcQVHfdc0fIJ3h4bJphawhK4oBimje1fJ1AEZK7bErGOs5EfDc o7ymbiwmojWOAnbuScVF18rKIy1FDMskqKZ/6znVAWkfzZfnDNoCKmlWjEP0Pw1F5U4v 5tLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=3l2pGLNy1syOjcF/M0OOPgBNYHnRnVXVj5dhzNhJtRg=; b=e7VNlLbsH7Jwx0EN8XvFZA5EnpaRTbhepnIRCMXx4gyLutOiA1fzEzKLIpwm1lAKg2 DAnhERB2NYgqgz9aDGpISX9lpaQz0BDVlQ3GOQ3wi3HzJ+cFuTk7XMnVcGI4agRr/lYP TrxvZ9kFCTcCrj1Ma8psaQJgrUEIeyQLxF7jgw4wo6i+nQNm7dE9NjEbFCAsgXlx923B lapoRZl54NNTC3FppL/75M4W9o6ECN53NE9qMVaIWWgbyQZEeV49wbFKEpH1kUNcbEDr KL3EJTOiwIgFwBBZYEntFL1SsKChlHnmcTpUVjHyVAy9oOWfP0XuPinUAVDi5/WJF8Qh SMug== X-Gm-Message-State: ALyK8tKXceGAQf0iejr+9Y05G26V6RQLeKrr/R7SDwfU64PUk36VHF14m7yrA5PdRoigBom+ X-Received: by 10.28.27.8 with SMTP id b8mr431354wmb.40.1466179344290; Fri, 17 Jun 2016 09:02:24 -0700 (PDT) Received: from XPS13.localdomain (184.203.134.77.rev.sfr.net. [77.134.203.184]) by smtp.gmail.com with ESMTPSA id a129sm84044wma.2.2016.06.17.09.02.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 17 Jun 2016 09:02:23 -0700 (PDT) From: Thomas Monjalon To: david.marchand@6wind.com Cc: dev@dpdk.org Date: Fri, 17 Jun 2016 18:02:20 +0200 Message-Id: <1466179340-7513-1-git-send-email-thomas.monjalon@6wind.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: References: Subject: [dpdk-dev] [PATCH v2] eal: fix thread naming on FreeBSD X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 Acked-by: David Marchand --- v2: fix doxygen comment --- examples/tep_termination/main.c | 2 +- examples/vhost/main.c | 2 +- examples/vhost_xen/main.c | 2 +- lib/librte_eal/bsdapp/eal/eal.c | 2 +- lib/librte_eal/bsdapp/eal/eal_thread.c | 7 +++++++ lib/librte_eal/bsdapp/eal/rte_eal_version.map | 1 + lib/librte_eal/common/include/rte_lcore.h | 23 ++++++++-------------- 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_thread.c | 11 +++++++++++ lib/librte_eal/linuxapp/eal/eal_timer.c | 4 ++-- lib/librte_eal/linuxapp/eal/rte_eal_version.map | 1 + 13 files changed, 37 insertions(+), 24 deletions(-) diff --git a/examples/tep_termination/main.c b/examples/tep_termination/main.c index b8297dd..aa67a6b 100644 --- a/examples/tep_termination/main.c +++ b/examples/tep_termination/main.c @@ -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. */ diff --git a/examples/vhost/main.c b/examples/vhost/main.c index 665886e..f849571 100644 --- a/examples/vhost/main.c +++ b/examples/vhost/main.c @@ -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"); } diff --git a/examples/vhost_xen/main.c b/examples/vhost_xen/main.c index 2b04c95..2e40357 100644 --- a/examples/vhost_xen/main.c +++ b/examples/vhost_xen/main.c @@ -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"); } diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c index 06bfd4e..a0c8f8c 100644 --- a/lib/librte_eal/bsdapp/eal/eal.c +++ b/lib/librte_eal/bsdapp/eal/eal.c @@ -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); } /* diff --git a/lib/librte_eal/bsdapp/eal/eal_thread.c b/lib/librte_eal/bsdapp/eal/eal_thread.c index 9a03437..1b8cd8a 100644 --- a/lib/librte_eal/bsdapp/eal/eal_thread.c +++ b/lib/librte_eal/bsdapp/eal/eal_thread.c @@ -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; +} diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map index 97d091b..3b4dd3b 100644 --- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map @@ -157,5 +157,6 @@ DPDK_16.07 { pci_get_sysfs_path; rte_keepalive_register_relay_callback; + rte_thread_setname; } DPDK_16.04; diff --git a/lib/librte_eal/common/include/rte_lcore.h b/lib/librte_eal/common/include/rte_lcore.h index ac15130..fe7b586 100644 --- a/lib/librte_eal/common/include/rte_lcore.h +++ b/lib/librte_eal/common/include/rte_lcore.h @@ -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 } diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index bba8fea..4f22c18 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) 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"); } diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c index a9af396..47a3b20 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) "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"); } 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 26d966e..d54ded8 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 @@ -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; diff --git a/lib/librte_eal/linuxapp/eal/eal_thread.c b/lib/librte_eal/linuxapp/eal/eal_thread.c index 18bd8e0..8c3bf03 100644 --- a/lib/librte_eal/linuxapp/eal/eal_thread.c +++ b/lib/librte_eal/linuxapp/eal/eal_thread.c @@ -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; +} diff --git a/lib/librte_eal/linuxapp/eal/eal_timer.c b/lib/librte_eal/linuxapp/eal/eal_timer.c index f2abb7b..afa32f5 100644 --- a/lib/librte_eal/linuxapp/eal/eal_timer.c +++ b/lib/librte_eal/linuxapp/eal/eal_timer.c @@ -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; diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map index 4874c92..7330a46 100644 --- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map @@ -160,5 +160,6 @@ DPDK_16.07 { pci_get_sysfs_path; rte_keepalive_register_relay_callback; + rte_thread_setname; } DPDK_16.04;