From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <stable-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id E0012A0548
	for <public@inbox.dpdk.org>; Sun, 28 Feb 2021 13:54:12 +0100 (CET)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id BF71A22A296;
	Sun, 28 Feb 2021 13:54:09 +0100 (CET)
Received: from new2-smtp.messagingengine.com (new2-smtp.messagingengine.com
 [66.111.4.224])
 by mails.dpdk.org (Postfix) with ESMTP id 20B2D22A27F;
 Sun, 28 Feb 2021 13:54:08 +0100 (CET)
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
 by mailnew.nyi.internal (Postfix) with ESMTP id C3187580393;
 Sun, 28 Feb 2021 07:54:07 -0500 (EST)
Received: from mailfrontend2 ([10.202.2.163])
 by compute2.internal (MEProxy); Sun, 28 Feb 2021 07:54:07 -0500
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=hkc05ZdljT4cA
 9nopi4moqKwTYjl5bTiHKhiEmHXke0=; b=s0SqI7rzMxdbalE1jf6LAs1USOfZ1
 AdzXJqU4PNui6ekTYxB7YeT3omSjUaq9x/Xx0iDd4HOW5n7B2/VQ0lSEmB1kjb7T
 M8NCKaYe3mGl9IALtig7YnPhi/21/fJr8ic261ZwpjlcRwlPRY3stNeuRLRIJrX5
 pb0T4+wowWp29H/wL4N1KYPBXcD7fLribh3Y4OnTvBX0KxOUVZ9RSUXNelTgxTWB
 yCwZFr/gZzE+wKmFruqhZO31iIe7EesElT2YX/losaKMQMsBqVbtgjZtxsd6+Evl
 OfLm7BMj8xACILrfpOy3MeBj6kNnX+l0fpXiADXzl3EZ2DTKXwm43Cn9Q==
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=hkc05ZdljT4cA9nopi4moqKwTYjl5bTiHKhiEmHXke0=; b=Q+L1ExGq
 Skdl201rNVb/nZsC9xwHIWHrtPtFgO4yKmjxIdSEIWYtK68WTzKkOUIwlMaUd3Jh
 VNEWMhND+gRG6Vps+lls/3zQpwe04Xm4xWLAmMDGpbEMUiRemyuAL2TR3JHX7xZV
 kxS3g/dMbTg15b7BWOC57pf3R2YZbLU3I2p8/LFpnBbindVLrfWzxOesv1Fuok+g
 pJET9q9XDQsc7bN0+T8KAX+PtUxM4Q+NzIF/HlPuTzYqvMISN3q1YvO9F9vwBYKm
 IZbH0PuWofvFwTI8QoS7h0CaCxvZjM8z2VybB6mQeZtHoRf8StQ62Nq9pveqo6Gn
 FYEagi+bwFggZw==
X-ME-Sender: <xms:b5I7YEh9PG2xyemIlrZ4v4XHCTWvGHNkw-4MM5x3DiIf0mzGjN8eEQ>
 <xme:b5I7YNAjphFn72F9uMCxAlTfpRRRpW-BkSFPT9z6LNGvhKyb1EZCVYaJ0Y-KQlEDC
 lQfhpDY1lSC9_LRaQ>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrleeigdegkecutefuodetggdotefrodftvf
 curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu
 uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc
 fjughrpefhvffufffkofgjfhgggfestdekredtredttdenucfhrhhomhepvfhhohhmrghs
 ucfoohhnjhgrlhhonhcuoehthhhomhgrshesmhhonhhjrghlohhnrdhnvghtqeenucggtf
 frrghtthgvrhhnpeehjefhvdffueehieevuddvfeeigefhtddvvddtheehgfekfefhtdfh
 teffgeetueenucffohhmrghinheptghonhhfrdhinhenucfkphepjeejrddufeegrddvtd
 efrddukeegnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhho
 mhepthhhohhmrghssehmohhnjhgrlhhonhdrnhgvth
X-ME-Proxy: <xmx:b5I7YMF3CiMl7dOVwM3ynpflk9kWwPtKwg4MVBgEL3ySur6ah2_-0w>
 <xmx:b5I7YFTP21tF7LV7-9kdGPx_JhqpPeA42vn9WnbhQ2pXxiC-N6APrA>
 <xmx:b5I7YByDkM7NOq22aLMjgkS6jm1DrcqgNa_MzBrHR3S8qO-3dIecRQ>
 <xmx:b5I7YInSutXFf7iZCuxbhtX1jbWaxqdUlvchQZ88oCmmObRhd55ARw>
Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184])
 by mail.messagingengine.com (Postfix) with ESMTPA id 8219C1080054;
 Sun, 28 Feb 2021 07:54:06 -0500 (EST)
From: Thomas Monjalon <thomas@monjalon.net>
To: dev@dpdk.org
Cc: ncopa@alpinelinux.org, stable@dpdk.org,
 Bruce Richardson <bruce.richardson@intel.com>,
 Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>,
 Narcisa Ana Maria Vasile <navasile@linux.microsoft.com>,
 Dmitry Malloy <dmitrym@microsoft.com>,
 Pallavi Kadam <pallavi.kadam@intel.com>,
 Kevin Laatz <kevin.laatz@intel.com>, Ferruh Yigit <ferruh.yigit@intel.com>,
 Jerin Jacob <jerin.jacob@caviumnetworks.com>
Date: Sun, 28 Feb 2021 13:53:40 +0100
Message-Id: <20210228125353.2436562-6-thomas@monjalon.net>
X-Mailer: git-send-email 2.30.1
In-Reply-To: <20210228125353.2436562-1-thomas@monjalon.net>
References: <20190313170657.16688-1-ncopa@alpinelinux.org>
 <20210228125353.2436562-1-thomas@monjalon.net>
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Subject: [dpdk-stable] [PATCH v6 05/17] eal: fix build with musl
X-BeenThere: stable@dpdk.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: patches for DPDK stable branches <stable.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/stable>,
 <mailto:stable-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/stable/>
List-Post: <mailto:stable@dpdk.org>
List-Help: <mailto:stable-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/stable>,
 <mailto:stable-request@dpdk.org?subject=subscribe>
Errors-To: stable-bounces@dpdk.org
Sender: "stable" <stable-bounces@dpdk.org>

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 <thomas@monjalon.net>
Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
---
 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 5c883b613b..a536bcb493 100644
--- a/doc/api/doxy-api.conf.in
+++ b/doc/api/doxy-api.conf.in
@@ -80,7 +80,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 <pthread_np.h>
 
 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 <sched.h>
 
+#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 <sys/file.h>
 #include <sys/mman.h>
+#include <fcntl.h>
 #include <unistd.h>
 
 #include <rte_errno.h>
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 f8e54dc68e..3ff3a42d78 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, 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.
-- 
2.30.1