From patchwork Fri Mar 19 14:57:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 89560 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D195CA0562; Fri, 19 Mar 2021 15:58:25 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C6B88140F24; Fri, 19 Mar 2021 15:57:51 +0100 (CET) Received: from new2-smtp.messagingengine.com (new2-smtp.messagingengine.com [66.111.4.224]) by mails.dpdk.org (Postfix) with ESMTP id DD42C140ED9; Fri, 19 Mar 2021 15:57:48 +0100 (CET) Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailnew.nyi.internal (Postfix) with ESMTP id 90B71580AFA; Fri, 19 Mar 2021 10:57:48 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Fri, 19 Mar 2021 10:57:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm3; bh=3W3RXk0RiUPcF IQnQnvKpgFuJV/frxbCOSiCNf1hGyE=; b=3b1Oyw/ivv4zUndbxBQA9b2g+UxxL d9llGuqVNmJL2Vg2pCBMx9uk95RFLbulD/2MRtd6p4/VXdfaAdRI3w32vgJRceyZ GN3P1bOzwxrSdBha6jmq6FYnby1E1hB/nWU8FmKEpvAdMMQBhhSqIU3jhipcHlzX WOtysZ8+qfKHEI86yUEp7HJdbTvFCIUUMlTfepUPgg5I0qZN1VMWFolnuHxNmzTV jho/MAf2wcgGoZmeS1cQ0WEvqlJWsgzX5shXaIqthhDnd8EX7IWC8IEOIE5hrYiN U0g0ai/tTC8LdDzR4rovH7uWDPN9bg0Z1dcuEHSZSRxZtH1BQUtN2k8eg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=3W3RXk0RiUPcFIQnQnvKpgFuJV/frxbCOSiCNf1hGyE=; b=sFUtThTb /7W8CVBavBVLDWByTmopVuvuDLabvbtMwuNiEnZNY4rNB4rBFogrYOSZq7S24vKx P8wFAfs0uFXCDOfMf97nyH+9t2MSIF3BxTGhg3DiNxITxbxAXeB9HVSQWqd5DjiO F7S0zHiJJlunGPLSJRUw93uV31i2AdnseZsJeXigBzHSElDV0ymnv+yhi7RO85fh vqZwVcINXS1CITJL3Y0jTblA9cwv6xxsoPw/wt1x+DJpVCQzr3rPSdBv3fZnidEs CTCGwsPdfT7qekynOgKOWYJe4XovIj0rnlaCeMB6yEyg1Lqhf/DgSIJbloLR6rlK dNuEQtLELoESnA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudefkedgjeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpefvhhhomhgr shcuofhonhhjrghlohhnuceothhhohhmrghssehmohhnjhgrlhhonhdrnhgvtheqnecugg ftrfgrthhtvghrnhepheejhfdvffeuheeiveduvdefieeghfdtvddvtdehhefgkeefhfdt hfetffegteeunecuffhomhgrihhnpegtohhnfhdrihhnnecukfhppeejjedrudefgedrvd dtfedrudekgeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhr ohhmpehthhhomhgrshesmhhonhhjrghlohhnrdhnvght X-ME-Proxy: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id D067124005A; Fri, 19 Mar 2021 10:57:46 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: ncopa@alpinelinux.org, stable@dpdk.org, Andrew Rybchenko , David Marchand , Bruce Richardson , Dmitry Kozlyuk , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam , Kevin Laatz , Jerin Jacob , Ferruh Yigit Date: Fri, 19 Mar 2021 15:57:18 +0100 Message-Id: <20210319145730.3555384-6-thomas@monjalon.net> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210319145730.3555384-1-thomas@monjalon.net> References: <20190313170657.16688-1-ncopa@alpinelinux.org> <20210319145730.3555384-1-thomas@monjalon.net> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v7 05/17] eal: fix build with musl X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" In musl libc, cpu_set_t is defined only if _GNU_SOURCE is defined. In case _GNU_SOURCE is undefined, as in eal_common_errno.c, it was not possible to include rte_os.h which uses cpu_set_t. This limitation is removed: if CPU_SETSIZE is not defined, cpu_set_t related definitions and functions are skipped. Note: such definitions are unneeded in eal_common_errno.c. Applications which do not define _GNU_SOURCE may miss cpu_set_t related features on musl. Such case is detected by RTE_HAS_CPUSET being undefined, so functions which depend on rte_cpuset_t will be unavailable. A missing include of fcntl.h is also added. Bugzilla ID: 35 Fixes: 11b57c698005 ("eal: fix error string function") Fixes: 176bb37ca6f3 ("eal: introduce internal wrappers for file operations") Cc: stable@dpdk.org Signed-off-by: Thomas Monjalon Signed-off-by: Natanael Copa Acked-by: Andrew Rybchenko Acked-by: David Marchand --- doc/api/doxy-api.conf.in | 3 ++- lib/librte_eal/freebsd/include/rte_os.h | 1 + lib/librte_eal/include/rte_lcore.h | 4 ++++ lib/librte_eal/include/rte_thread.h | 4 ++++ lib/librte_eal/linux/include/rte_os.h | 3 +++ lib/librte_eal/unix/eal_file.c | 1 + lib/librte_eal/windows/include/sched.h | 1 + lib/librte_telemetry/rte_telemetry.h | 4 ++++ 8 files changed, 20 insertions(+), 1 deletion(-) diff --git a/doc/api/doxy-api.conf.in b/doc/api/doxy-api.conf.in index 5eb31508fd..b3c5cdfeca 100644 --- a/doc/api/doxy-api.conf.in +++ b/doc/api/doxy-api.conf.in @@ -81,7 +81,8 @@ INPUT += @API_EXAMPLES@ FILE_PATTERNS = rte_*.h \ cmdline.h PREDEFINED = __DOXYGEN__ \ - VFIO_PRESENT \ + RTE_HAS_CPUSET \ + VFIO_PRESENT \ __attribute__(x)= OPTIMIZE_OUTPUT_FOR_C = YES diff --git a/lib/librte_eal/freebsd/include/rte_os.h b/lib/librte_eal/freebsd/include/rte_os.h index c16f2a30e9..627f0483ab 100644 --- a/lib/librte_eal/freebsd/include/rte_os.h +++ b/lib/librte_eal/freebsd/include/rte_os.h @@ -13,6 +13,7 @@ #include typedef cpuset_t rte_cpuset_t; +#define RTE_HAS_CPUSET #define RTE_CPU_AND(dst, src1, src2) do \ { \ cpuset_t tmp; \ diff --git a/lib/librte_eal/include/rte_lcore.h b/lib/librte_eal/include/rte_lcore.h index 0fe0bd839c..1550b75da0 100644 --- a/lib/librte_eal/include/rte_lcore.h +++ b/lib/librte_eal/include/rte_lcore.h @@ -186,6 +186,8 @@ __rte_experimental int rte_lcore_to_cpu_id(int lcore_id); +#ifdef RTE_HAS_CPUSET + /** * @warning * @b EXPERIMENTAL: this API may change without prior notice. @@ -200,6 +202,8 @@ __rte_experimental rte_cpuset_t rte_lcore_cpuset(unsigned int lcore_id); +#endif /* RTE_HAS_CPUSET */ + /** * Test if an lcore is enabled. * diff --git a/lib/librte_eal/include/rte_thread.h b/lib/librte_eal/include/rte_thread.h index e640ea1857..ac5a89b1ad 100644 --- a/lib/librte_eal/include/rte_thread.h +++ b/lib/librte_eal/include/rte_thread.h @@ -25,6 +25,8 @@ extern "C" { */ typedef struct eal_tls_key *rte_tls_key; +#ifdef RTE_HAS_CPUSET + /** * Set core affinity of the current thread. * Support both EAL and non-EAL thread and update TLS. @@ -46,6 +48,8 @@ int rte_thread_set_affinity(rte_cpuset_t *cpusetp); */ void rte_thread_get_affinity(rte_cpuset_t *cpusetp); +#endif /* RTE_HAS_CPUSET */ + /** * Create a TLS data key visible to all threads in the process. * the created key is later used to get/set a value. diff --git a/lib/librte_eal/linux/include/rte_os.h b/lib/librte_eal/linux/include/rte_os.h index 390b87b3a1..1618b4df22 100644 --- a/lib/librte_eal/linux/include/rte_os.h +++ b/lib/librte_eal/linux/include/rte_os.h @@ -12,7 +12,9 @@ #include +#ifdef CPU_SETSIZE /* may require _GNU_SOURCE */ typedef cpu_set_t rte_cpuset_t; +#define RTE_HAS_CPUSET #define RTE_CPU_AND(dst, src1, src2) CPU_AND(dst, src1, src2) #define RTE_CPU_OR(dst, src1, src2) CPU_OR(dst, src1, src2) #define RTE_CPU_FILL(set) do \ @@ -28,5 +30,6 @@ typedef cpu_set_t rte_cpuset_t; RTE_CPU_FILL(&tmp); \ CPU_XOR(dst, &tmp, src); \ } while (0) +#endif #endif /* _RTE_OS_H_ */ diff --git a/lib/librte_eal/unix/eal_file.c b/lib/librte_eal/unix/eal_file.c index 1b26475ba4..ec554e0096 100644 --- a/lib/librte_eal/unix/eal_file.c +++ b/lib/librte_eal/unix/eal_file.c @@ -4,6 +4,7 @@ #include #include +#include #include #include diff --git a/lib/librte_eal/windows/include/sched.h b/lib/librte_eal/windows/include/sched.h index fbe07f742c..ff572b5dcb 100644 --- a/lib/librte_eal/windows/include/sched.h +++ b/lib/librte_eal/windows/include/sched.h @@ -28,6 +28,7 @@ extern "C" { typedef struct _rte_cpuset_s { long long _bits[_NUM_SETS(CPU_SETSIZE)]; } rte_cpuset_t; +#define RTE_HAS_CPUSET #define CPU_SET(b, s) ((s)->_bits[_WHICH_SET(b)] |= (1LL << _WHICH_BIT(b))) diff --git a/lib/librte_telemetry/rte_telemetry.h b/lib/librte_telemetry/rte_telemetry.h index f7c8534b82..027b048d78 100644 --- a/lib/librte_telemetry/rte_telemetry.h +++ b/lib/librte_telemetry/rte_telemetry.h @@ -292,6 +292,8 @@ __rte_experimental int rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help); +#ifdef RTE_HAS_CPUSET + /** * @internal * Initialize Telemetry. @@ -314,6 +316,8 @@ int rte_telemetry_init(const char *runtime_dir, const char *rte_version, rte_cpuset_t *cpuset, const char **err_str); +#endif /* RTE_HAS_CPUSET */ + /** * Get a pointer to a container with memory allocated. The container is to be * used embedded within an existing telemetry dict/array.