From patchwork Sat Feb 20 23:29:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88039 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 77232A0524; Sun, 21 Feb 2021 00:29:28 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AD4B322A249; Sun, 21 Feb 2021 00:29:21 +0100 (CET) Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com [209.85.208.177]) by mails.dpdk.org (Postfix) with ESMTP id 3E3094013F for ; Sun, 21 Feb 2021 00:29:20 +0100 (CET) Received: by mail-lj1-f177.google.com with SMTP id v6so44041287ljh.9 for ; Sat, 20 Feb 2021 15:29:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3pMvwR89qcZTBE9RQzUAoHmCguIRyzM5f0bBUWwi8Xc=; b=Em4iYqV1LmkxGnA1XcTONyG4GktPiGjgTEDvn/T+P4U0kCSRCWw3qmpqYUlWOPFu5s oFYPtq0qPIgWSQmdnxjb2k8UFWMsDcAmQab/4y9MQYtqkWi+QXmDG71UVInzRQEnXTSP E1+RNVfITHLRpwbufW4EBbYfCK9evgmhMjsvBUIIy8nEGTjotEXtA0ZIXGZ1Rt54jCyV wzoKh8NeQ2ETzxOhiPx5f7LVg5n+megZ/qjSK+jsD1nm7/8Zulbm0LeeJcgwBnRULj0j 81Ux97BBlLqNrWt6PCXgEvn1Zy7F2ubOsB3mLidwzRt1oeaR1Xk6QmMcaOiHxCXugZ5d 8Uxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3pMvwR89qcZTBE9RQzUAoHmCguIRyzM5f0bBUWwi8Xc=; b=Mam9ji2w4s0E/C0mvyZNBtdUqZC/XEpoCB2kaL58nN8fdztmfhP1c6CqlRSGM+nBoJ f/WTvnk0nBp+6srBu1EI7YoNJh4ciM39VIQJtekCsj2z3MLAy/6fekypeiqcRUiayHN7 ZzpeNrCVVvCqqUa4C9ofy/vxoZuDkmBhQInhdNzD8ay+Dgh1u2lxNTj6S6GQDV0LnGM/ NEDYeOnPi744vthLlQddCKsucUD+EQK4MeeDQx5P6f8yJyAyysns06AWTFMy8HdHf1MY eNF4euGoRp0Nfn+xdrq6QaD/HVa0RnvZ9SBoVHCcaR9Zp/URbvwmtlztxyk55W5M4jYS Q4iQ== X-Gm-Message-State: AOAM533N0EPh6Ww8/v90YGJTcwT8DFCxgLGaa1Fc4uYVICm+a9DbbTO2 5fYrVLpjQY5OrrPtFYLEjHrQAT3+LMpHUw== X-Google-Smtp-Source: ABdhPJxgnEuLLWrMRbb9/m49v9rgIggkpxOnfifvesl7zvMW9WVlGY1R6xkRGVPjI7/6i76siG1B+w== X-Received: by 2002:a05:6512:1148:: with SMTP id m8mr9469606lfg.64.1613863759582; Sat, 20 Feb 2021 15:29:19 -0800 (PST) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f5sm1462931ljc.8.2021.02.20.15.29.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Feb 2021 15:29:19 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Nick Connolly , Dmitry Kozlyuk , Jerin Jacob , Sunil Kumar Kori Date: Sun, 21 Feb 2021 02:29:04 +0300 Message-Id: <20210220232910.772-2-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210220232910.772-1-dmitry.kozliuk@gmail.com> References: <20210220232910.772-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 1/7] eal: add wrappers for POSIX string functions 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" POSIX strncasecmp(), strdup(), and strtok_r() have different names on Windows, respectively, strnicmp(), _strdup(), and strtok_s(). Add wrappers as inline functions, because they're used from librte_kvargs, and thus cannot be in librte_eal; besides, implementation is trivial. Signed-off-by: Dmitry Kozlyuk --- lib/librte_eal/common/eal_common_dev.c | 6 +-- lib/librte_eal/common/eal_common_devargs.c | 7 ++-- lib/librte_eal/common/eal_common_log.c | 5 ++- lib/librte_eal/common/eal_common_options.c | 12 +++--- lib/librte_eal/common/eal_common_trace_ctf.c | 2 +- .../common/eal_common_trace_utils.c | 2 +- lib/librte_eal/include/rte_string_fns.h | 42 +++++++++++++++++++ 7 files changed, 60 insertions(+), 16 deletions(-) diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c index 8a3bd3100..0a15fdcf7 100644 --- a/lib/librte_eal/common/eal_common_dev.c +++ b/lib/librte_eal/common/eal_common_dev.c @@ -462,7 +462,7 @@ rte_dev_event_callback_register(const char *device_name, if (!device_name) { event_cb->dev_name = NULL; } else { - event_cb->dev_name = strdup(device_name); + event_cb->dev_name = rte_strdup(device_name); if (event_cb->dev_name == NULL) { ret = -ENOMEM; goto error; @@ -630,10 +630,10 @@ dev_str_sane_copy(const char *str) end = strcspn(str, ",/"); if (str[end] == ',') { - copy = strdup(&str[end + 1]); + copy = rte_strdup(&str[end + 1]); } else { /* '/' or '\0' */ - copy = strdup(""); + copy = rte_strdup(""); } if (copy == NULL) { rte_errno = ENOMEM; diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c index fcf3d9a3c..14e082a27 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include "eal_private.h" @@ -75,7 +76,7 @@ rte_devargs_layers_parse(struct rte_devargs *devargs, * anything and keep referring only to it. */ if (devargs->data != devstr) { - devargs->data = strdup(devstr); + devargs->data = rte_strdup(devstr); if (devargs->data == NULL) { RTE_LOG(ERR, EAL, "OOM\n"); ret = -ENOMEM; @@ -219,9 +220,9 @@ rte_devargs_parse(struct rte_devargs *da, const char *dev) da->bus = bus; /* Parse eventual device arguments */ if (devname[i] == ',') - da->args = strdup(&devname[i + 1]); + da->args = rte_strdup(&devname[i + 1]); else - da->args = strdup(""); + da->args = rte_strdup(""); if (da->args == NULL) { RTE_LOG(ERR, EAL, "not enough memory to parse arguments\n"); return -ENOMEM; diff --git a/lib/librte_eal/common/eal_common_log.c b/lib/librte_eal/common/eal_common_log.c index c5554badb..557a8243f 100644 --- a/lib/librte_eal/common/eal_common_log.c +++ b/lib/librte_eal/common/eal_common_log.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "eal_private.h" @@ -194,7 +195,7 @@ static int rte_log_save_level(int priority, if (regcomp(&opt_ll->re_match, regex, 0) != 0) goto fail; } else if (pattern) { - opt_ll->pattern = strdup(pattern); + opt_ll->pattern = rte_strdup(pattern); if (opt_ll->pattern == NULL) goto fail; } else @@ -270,7 +271,7 @@ rte_log_lookup(const char *name) static int __rte_log_register(const char *name, int id) { - char *dup_name = strdup(name); + char *dup_name = rte_strdup(name); if (dup_name == NULL) return -ENOMEM; diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 622c7bc42..3612ad441 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -228,7 +228,7 @@ eal_save_args(int argc, char **argv) return -1; for (i = 0; i < argc; i++) { - eal_args[i] = strdup(argv[i]); + eal_args[i] = rte_strdup(argv[i]); if (strcmp(argv[i], "--") == 0) break; } @@ -243,7 +243,7 @@ eal_save_args(int argc, char **argv) return -1; for (j = 0; i < argc; j++, i++) - eal_app_args[j] = strdup(argv[i]); + eal_app_args[j] = rte_strdup(argv[i]); eal_app_args[j] = NULL; return 0; @@ -1273,7 +1273,7 @@ eal_parse_log_level(const char *arg) char *str, *level; int priority; - str = strdup(arg); + str = rte_strdup(arg); if (str == NULL) return -1; @@ -1324,11 +1324,11 @@ eal_parse_log_level(const char *arg) static enum rte_proc_type_t eal_parse_proc_type(const char *arg) { - if (strncasecmp(arg, "primary", sizeof("primary")) == 0) + if (rte_strncasecmp(arg, "primary", sizeof("primary")) == 0) return RTE_PROC_PRIMARY; - if (strncasecmp(arg, "secondary", sizeof("secondary")) == 0) + if (rte_strncasecmp(arg, "secondary", sizeof("secondary")) == 0) return RTE_PROC_SECONDARY; - if (strncasecmp(arg, "auto", sizeof("auto")) == 0) + if (rte_strncasecmp(arg, "auto", sizeof("auto")) == 0) return RTE_PROC_AUTO; return RTE_PROC_INVALID; diff --git a/lib/librte_eal/common/eal_common_trace_ctf.c b/lib/librte_eal/common/eal_common_trace_ctf.c index 33e419aac..4041d9af6 100644 --- a/lib/librte_eal/common/eal_common_trace_ctf.c +++ b/lib/librte_eal/common/eal_common_trace_ctf.c @@ -398,7 +398,7 @@ char *trace_metadata_fixup_field(const char *field) if (strstr(field, ".") == NULL && strstr(field, "->") == NULL) return NULL; - out = strdup(field); + out = rte_strdup(field); if (out == NULL) return NULL; p = out; diff --git a/lib/librte_eal/common/eal_common_trace_utils.c b/lib/librte_eal/common/eal_common_trace_utils.c index 64f58fb66..d541a5ea9 100644 --- a/lib/librte_eal/common/eal_common_trace_utils.c +++ b/lib/librte_eal/common/eal_common_trace_utils.c @@ -145,7 +145,7 @@ eal_trace_args_save(const char *val) return -ENOMEM; } - arg->val = strdup(val); + arg->val = rte_strdup(val); if (arg->val == NULL) { trace_err("failed to allocate memory for %s", val); free(arg); diff --git a/lib/librte_eal/include/rte_string_fns.h b/lib/librte_eal/include/rte_string_fns.h index 8bac8243c..2d9d5afc8 100644 --- a/lib/librte_eal/include/rte_string_fns.h +++ b/lib/librte_eal/include/rte_string_fns.h @@ -116,6 +116,48 @@ rte_strlcat(char *dst, const char *src, size_t size) ssize_t rte_strscpy(char *dst, const char *src, size_t dsize); +/** + * @internal + * strncasecmp(3) replacement for systems that don't have it. + */ +static inline int +rte_strncasecmp(const char *s1, const char *s2, size_t size) +{ +#ifdef RTE_EXEC_ENV_WINDOWS + return _strnicmp(s1, s2, size); +#else + return strncasecmp(s1, s2, size); +#endif +} + +/** + * @internal + * strtor_r(3) replacement for systems that don't have it. + */ +static inline char * +rte_strtok(char *str, const char *delim, char **saveptr) +{ +#ifdef RTE_EXEC_ENV_WINDOWS + return strtok_s(str, delim, saveptr); +#else + return strtok_r(str, delim, saveptr); +#endif +} + +/** + * @internal + * strdup(3) replacement for systems that don't have it. + */ +static inline char * +rte_strdup(const char *str) +{ +#ifdef RTE_EXEC_ENV_WINDOWS + return _strdup(str); +#else + return strdup(str); +#endif +} + #ifdef __cplusplus } #endif From patchwork Sat Feb 20 23:29:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88040 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 CCD72A0524; Sun, 21 Feb 2021 00:29:36 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 511FA22A25E; Sun, 21 Feb 2021 00:29:23 +0100 (CET) Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) by mails.dpdk.org (Postfix) with ESMTP id 4DA4422A231 for ; Sun, 21 Feb 2021 00:29:21 +0100 (CET) Received: by mail-lj1-f176.google.com with SMTP id q14so44077793ljp.4 for ; Sat, 20 Feb 2021 15:29:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=O95C5jguH5R7dce3zUC7lq6Dgu8HddPybtOizsTLKQk=; b=ZTAyAYCK4LjmSPvFrYhzUrotoPQk+mrKCYaLLdjEQLXUVX6vFaxkrdeOiLAhokzImT ew1o1ReoAhO64s0MkyAJfgaf5eJD7wx90ri3XY47Hp+oaNChtqsI47LjYg18cw3d+Vz3 tZw8zNaghltIPDI52EQ9w/d6Pl87ykUwa8fMdRqGNOo7rD5ShWXGSyDkHAZEc8tuqN8z qfm+kV7K84+z2ZvIQLSVvzo9VuzVvH+3G2I3xYA5Y+omppyPg+pur4CzfdZgMzz4y6q9 9A7TgoY6MXdNNSsgHCGgOB3pxv3iGiDvtN9TDjT6JEn0fpEUx2kvReDTBRdtc6EaQdsi iwUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=O95C5jguH5R7dce3zUC7lq6Dgu8HddPybtOizsTLKQk=; b=dYbAVe8zDtXfQVHvOsefbJZ0dNXiH9P5CkD6l3KiD9qDNwNTiiym7HwHkHX8VkrXW2 6p17SqI+OjPkUqKTIJ2rg0epnMFpjE66RZZ/DRjzrDcq5xOGj2vAu172txC4flcB+vTr jx6B/x1qILMilRlI/Mie9DRG35f9SJgCnpJNWcD3fHdAOxVRFen2UHfQ5//4flE5fx4+ aHE2UBU3NoHBlUiHIetPaP65lozDuW0C8qy3kmeg1RvDyjXDJC7GumhQ9iDAFyjvPy/j 6KGHfc0qwrpwh4TUiBskFZEIPd7WaNl84hy9xxW242zCPp7gD8Q+HJdtUSZ0lEoGjSV6 bThg== X-Gm-Message-State: AOAM530Y5mYKJJ13E9h8AKVW6VXyJXJMFMPE7UphWoxuhNHQ5PGCB/qp MQElY4C4E/cDod4pOAIKEdGAGa/sKIXcVg== X-Google-Smtp-Source: ABdhPJzJRIsD7FSqnaBzxZTnOpPIy7LORu05fdKF/G4kxiZrzEuE5Rvb3DocDsCSYm88TlskhqlPqw== X-Received: by 2002:a2e:9b4a:: with SMTP id o10mr8724970ljj.3.1613863760563; Sat, 20 Feb 2021 15:29:20 -0800 (PST) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f5sm1462931ljc.8.2021.02.20.15.29.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Feb 2021 15:29:20 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Nick Connolly , Dmitry Kozlyuk , Anatoly Burakov , Jerin Jacob , Sunil Kumar Kori , Bruce Richardson , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam Date: Sun, 21 Feb 2021 02:29:05 +0300 Message-Id: <20210220232910.772-3-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210220232910.772-1-dmitry.kozliuk@gmail.com> References: <20210220232910.772-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 2/7] eal: add macro for maximum path length 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" Path length limit is PATH_MAX on Unix and _MAX_PATH on Windows. Add RTE_PATH_MAX macro for use in OS-independent code. Keep PATH_MAX in "common" multiprocess code, because it's really Unix-specific. Signed-off-by: Dmitry Kozlyuk --- PATH_MAX is not removed until the last patch to keep PCI building. lib/librte_eal/common/eal_common_config.c | 2 +- lib/librte_eal/common/eal_common_fbarray.c | 8 +++---- lib/librte_eal/common/eal_common_options.c | 20 +++++++++--------- .../common/eal_common_trace_utils.c | 9 ++++---- lib/librte_eal/common/eal_filesystem.h | 8 +++---- lib/librte_eal/common/eal_hugepages.h | 2 +- lib/librte_eal/common/eal_internal_cfg.h | 2 +- lib/librte_eal/common/eal_trace.h | 2 +- lib/librte_eal/freebsd/include/rte_os.h | 2 ++ lib/librte_eal/linux/include/rte_os.h | 2 ++ lib/librte_eal/windows/include/dirent.h | 21 +++++++------------ lib/librte_eal/windows/include/rte_os.h | 2 ++ 12 files changed, 41 insertions(+), 39 deletions(-) diff --git a/lib/librte_eal/common/eal_common_config.c b/lib/librte_eal/common/eal_common_config.c index 56d09dda7..33e5a076a 100644 --- a/lib/librte_eal/common/eal_common_config.c +++ b/lib/librte_eal/common/eal_common_config.c @@ -18,7 +18,7 @@ static struct rte_config rte_config = { }; /* platform-specific runtime dir */ -static char runtime_dir[PATH_MAX]; +static char runtime_dir[RTE_PATH_MAX]; /* internal configuration */ static struct internal_config internal_config; diff --git a/lib/librte_eal/common/eal_common_fbarray.c b/lib/librte_eal/common/eal_common_fbarray.c index d974f3dab..c21b8ec66 100644 --- a/lib/librte_eal/common/eal_common_fbarray.c +++ b/lib/librte_eal/common/eal_common_fbarray.c @@ -83,7 +83,7 @@ get_used_mask(void *data, unsigned int elt_sz, unsigned int len) static int resize_and_map(int fd, void *addr, size_t len) { - char path[PATH_MAX]; + char path[RTE_PATH_MAX]; void *map_addr; if (eal_file_truncate(fd, len)) { @@ -710,7 +710,7 @@ rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len, unsigned int elt_sz) { size_t page_sz, mmap_len; - char path[PATH_MAX]; + char path[RTE_PATH_MAX]; struct used_mask *msk; struct mem_area *ma = NULL; void *data = NULL; @@ -836,7 +836,7 @@ rte_fbarray_attach(struct rte_fbarray *arr) { struct mem_area *ma = NULL, *tmp = NULL; size_t page_sz, mmap_len; - char path[PATH_MAX]; + char path[RTE_PATH_MAX]; void *data = NULL; int fd = -1; @@ -978,7 +978,7 @@ rte_fbarray_destroy(struct rte_fbarray *arr) struct mem_area *tmp = NULL; size_t mmap_len; int fd, ret; - char path[PATH_MAX]; + char path[RTE_PATH_MAX]; const struct internal_config *internal_conf = eal_get_internal_configuration(); diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 3612ad441..bad389903 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -120,7 +120,7 @@ TAILQ_HEAD(shared_driver_list, shared_driver); struct shared_driver { TAILQ_ENTRY(shared_driver) next; - char name[PATH_MAX]; + char name[RTE_PATH_MAX]; void* lib_handle; }; @@ -367,7 +367,7 @@ eal_plugin_add(const char *path) return -1; } memset(solib, 0, sizeof(*solib)); - strlcpy(solib->name, path, PATH_MAX); + strlcpy(solib->name, path, RTE_PATH_MAX); TAILQ_INSERT_TAIL(&solib_list, solib, next); return 0; @@ -386,7 +386,7 @@ eal_plugindir_init(const char *path) { DIR *d = NULL; struct dirent *dent = NULL; - char sopath[PATH_MAX]; + char sopath[RTE_PATH_MAX]; if (path == NULL || *path == '\0') return 0; @@ -430,16 +430,16 @@ verify_perms(const char *dirpath) /* if not root, check down one level first */ if (strcmp(dirpath, "/") != 0) { - static __thread char last_dir_checked[PATH_MAX]; - char copy[PATH_MAX]; + static __thread char last_dir_checked[RTE_PATH_MAX]; + char copy[RTE_PATH_MAX]; const char *dir; - strlcpy(copy, dirpath, PATH_MAX); + strlcpy(copy, dirpath, RTE_PATH_MAX); dir = dirname(copy); - if (strncmp(dir, last_dir_checked, PATH_MAX) != 0) { + if (strncmp(dir, last_dir_checked, RTE_PATH_MAX) != 0) { if (verify_perms(dir) != 0) return -1; - strlcpy(last_dir_checked, dir, PATH_MAX); + strlcpy(last_dir_checked, dir, RTE_PATH_MAX); } } @@ -477,8 +477,8 @@ eal_dlopen(const char *pathname) pathname, strerror(errno)); goto out; } - if (strnlen(realp, PATH_MAX) == PATH_MAX) { - RTE_LOG(ERR, EAL, "Error, driver path greater than PATH_MAX\n"); + if (strnlen(realp, RTE_PATH_MAX) == RTE_PATH_MAX) { + RTE_LOG(ERR, EAL, "Error, driver path greater than RTE_PATH_MAX\n"); goto out; } diff --git a/lib/librte_eal/common/eal_common_trace_utils.c b/lib/librte_eal/common/eal_common_trace_utils.c index d541a5ea9..6b81fdeec 100644 --- a/lib/librte_eal/common/eal_common_trace_utils.c +++ b/lib/librte_eal/common/eal_common_trace_utils.c @@ -369,11 +369,11 @@ trace_mkdir(void) static int trace_meta_save(struct trace *trace) { - char file_name[PATH_MAX]; + char file_name[RTE_PATH_MAX]; FILE *f; int rc; - rc = snprintf(file_name, PATH_MAX, "%s/metadata", trace->dir); + rc = snprintf(file_name, RTE_PATH_MAX, "%s/metadata", trace->dir); if (rc < 0) return rc; @@ -400,11 +400,12 @@ static int trace_mem_save(struct trace *trace, struct __rte_trace_header *hdr, uint32_t cnt) { - char file_name[PATH_MAX]; + char file_name[RTE_PATH_MAX]; FILE *f; int rc; - rc = snprintf(file_name, PATH_MAX, "%s/channel0_%d", trace->dir, cnt); + rc = snprintf(file_name, RTE_PATH_MAX, "%s/channel0_%d", + trace->dir, cnt); if (rc < 0) return rc; diff --git a/lib/librte_eal/common/eal_filesystem.h b/lib/librte_eal/common/eal_filesystem.h index 5d21f07c2..d28a9b23d 100644 --- a/lib/librte_eal/common/eal_filesystem.h +++ b/lib/librte_eal/common/eal_filesystem.h @@ -36,7 +36,7 @@ eal_get_hugefile_prefix(void); static inline const char * eal_runtime_config_path(void) { - static char buffer[PATH_MAX]; /* static so auto-zeroed */ + static char buffer[RTE_PATH_MAX]; /* static so auto-zeroed */ snprintf(buffer, sizeof(buffer), "%s/%s", rte_eal_get_runtime_dir(), RUNTIME_CONFIG_FNAME); @@ -48,7 +48,7 @@ eal_runtime_config_path(void) static inline const char * eal_mp_socket_path(void) { - static char buffer[PATH_MAX]; /* static so auto-zeroed */ + static char buffer[RTE_PATH_MAX]; /* static so auto-zeroed */ snprintf(buffer, sizeof(buffer), "%s/%s", rte_eal_get_runtime_dir(), MP_SOCKET_FNAME); @@ -68,7 +68,7 @@ eal_get_fbarray_path(char *buffer, size_t buflen, const char *name) { static inline const char * eal_hugepage_info_path(void) { - static char buffer[PATH_MAX]; /* static so auto-zeroed */ + static char buffer[RTE_PATH_MAX]; /* static so auto-zeroed */ snprintf(buffer, sizeof(buffer), "%s/%s", rte_eal_get_runtime_dir(), HUGEPAGE_INFO_FNAME); @@ -80,7 +80,7 @@ eal_hugepage_info_path(void) static inline const char * eal_hugepage_data_path(void) { - static char buffer[PATH_MAX]; /* static so auto-zeroed */ + static char buffer[RTE_PATH_MAX]; /* static so auto-zeroed */ snprintf(buffer, sizeof(buffer), "%s/%s", rte_eal_get_runtime_dir(), HUGEPAGE_DATA_FNAME); diff --git a/lib/librte_eal/common/eal_hugepages.h b/lib/librte_eal/common/eal_hugepages.h index 1b560d337..02b324ed1 100644 --- a/lib/librte_eal/common/eal_hugepages.h +++ b/lib/librte_eal/common/eal_hugepages.h @@ -9,7 +9,7 @@ #include #include -#define MAX_HUGEPAGE_PATH PATH_MAX +#define MAX_HUGEPAGE_PATH RTE_PATH_MAX /** * Structure used to store information about hugepages that we mapped diff --git a/lib/librte_eal/common/eal_internal_cfg.h b/lib/librte_eal/common/eal_internal_cfg.h index 51dbe86e2..c8ea3b8fc 100644 --- a/lib/librte_eal/common/eal_internal_cfg.h +++ b/lib/librte_eal/common/eal_internal_cfg.h @@ -27,7 +27,7 @@ */ struct hugepage_info { uint64_t hugepage_sz; /**< size of a huge page */ - char hugedir[PATH_MAX]; /**< dir where hugetlbfs is mounted */ + char hugedir[RTE_PATH_MAX]; /**< dir where hugetlbfs is mounted */ uint32_t num_pages[RTE_MAX_NUMA_NODES]; /**< number of hugepages of that size on each socket */ int lock_descriptor; /**< file descriptor for hugepage dir */ diff --git a/lib/librte_eal/common/eal_trace.h b/lib/librte_eal/common/eal_trace.h index 06751eb23..ab915eb10 100644 --- a/lib/librte_eal/common/eal_trace.h +++ b/lib/librte_eal/common/eal_trace.h @@ -51,7 +51,7 @@ struct trace_arg { }; struct trace { - char dir[PATH_MAX]; + char dir[RTE_PATH_MAX]; int dir_offset; int register_errno; bool status; diff --git a/lib/librte_eal/freebsd/include/rte_os.h b/lib/librte_eal/freebsd/include/rte_os.h index eeb750cd8..b37d59b5e 100644 --- a/lib/librte_eal/freebsd/include/rte_os.h +++ b/lib/librte_eal/freebsd/include/rte_os.h @@ -13,6 +13,8 @@ #include +#define RTE_PATH_MAX PATH_MAX + typedef cpuset_t rte_cpuset_t; #define RTE_CPU_AND(dst, src1, src2) do \ { \ diff --git a/lib/librte_eal/linux/include/rte_os.h b/lib/librte_eal/linux/include/rte_os.h index 218d4fa86..af7d052d9 100644 --- a/lib/librte_eal/linux/include/rte_os.h +++ b/lib/librte_eal/linux/include/rte_os.h @@ -13,6 +13,8 @@ #include +#define RTE_PATH_MAX PATH_MAX + typedef cpu_set_t rte_cpuset_t; #define RTE_CPU_AND(dst, src1, src2) CPU_AND(dst, src1, src2) #define RTE_CPU_OR(dst, src1, src2) CPU_OR(dst, src1, src2) diff --git a/lib/librte_eal/windows/include/dirent.h b/lib/librte_eal/windows/include/dirent.h index 869a59837..3a9a694f4 100644 --- a/lib/librte_eal/windows/include/dirent.h +++ b/lib/librte_eal/windows/include/dirent.h @@ -28,11 +28,6 @@ #include #include -/* Maximum length of file name */ -#if !defined(PATH_MAX) -# define PATH_MAX MAX_PATH -#endif - /* File type flags for d_type */ #define DT_UNKNOWN 0 #define DT_REG S_IFREG @@ -67,7 +62,7 @@ struct _wdirent { int d_type; /* File name */ - wchar_t d_name[PATH_MAX]; + wchar_t d_name[RTE_PATH_MAX]; }; typedef struct _wdirent _wdirent; @@ -113,7 +108,7 @@ struct dirent { int d_type; /* File name */ - char d_name[PATH_MAX]; + char d_name[RTE_PATH_MAX]; }; typedef struct dirent dirent; @@ -388,12 +383,12 @@ opendir(const char *dirname) /* Allocate memory for DIR structure */ dirp = (DIR *)malloc(sizeof(struct DIR)); if (dirp) { - wchar_t wname[PATH_MAX]; + wchar_t wname[RTE_PATH_MAX]; size_t n; /* Convert directory name to wide-character string */ - error = dirent_mbstowcs_s(&n, wname, PATH_MAX, - dirname, PATH_MAX); + error = dirent_mbstowcs_s(&n, wname, RTE_PATH_MAX, + dirname, RTE_PATH_MAX); if (!error) { /* Open directory stream using wide-character name */ @@ -457,7 +452,7 @@ readdir(DIR *dirp) /* Attempt to convert file name to multi-byte string */ error = dirent_wcstombs_s(&n, dirp->ent.d_name, - PATH_MAX, datap->cFileName, PATH_MAX); + RTE_PATH_MAX, datap->cFileName, RTE_PATH_MAX); /* * If the file name cannot be represented by a multi-byte @@ -472,8 +467,8 @@ readdir(DIR *dirp) */ if (error && datap->cAlternateFileName[0] != '\0') { error = dirent_wcstombs_s( - &n, dirp->ent.d_name, PATH_MAX, - datap->cAlternateFileName, PATH_MAX); + &n, dirp->ent.d_name, RTE_PATH_MAX, + datap->cAlternateFileName, RTE_PATH_MAX); } if (!error) { diff --git a/lib/librte_eal/windows/include/rte_os.h b/lib/librte_eal/windows/include/rte_os.h index 7ef38ff06..edca11bd2 100644 --- a/lib/librte_eal/windows/include/rte_os.h +++ b/lib/librte_eal/windows/include/rte_os.h @@ -20,6 +20,8 @@ extern "C" { #endif +#define RTE_PATH_MAX _MAX_PATH + /* limits.h replacement, value as in */ #ifndef PATH_MAX #define PATH_MAX _MAX_PATH From patchwork Sat Feb 20 23:29:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88041 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 866EEA0524; Sun, 21 Feb 2021 00:29:43 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 923AC22A262; Sun, 21 Feb 2021 00:29:24 +0100 (CET) Received: from mail-lj1-f169.google.com (mail-lj1-f169.google.com [209.85.208.169]) by mails.dpdk.org (Postfix) with ESMTP id 18CFC22A25A for ; Sun, 21 Feb 2021 00:29:22 +0100 (CET) Received: by mail-lj1-f169.google.com with SMTP id a17so44114494ljq.2 for ; Sat, 20 Feb 2021 15:29:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6HBBi46aLE4tojLHuhD1zt9K6yB/yz+Q7GFJaWnW3r4=; b=Pouv+pa1LxnK7/fkXielfPxT6/Hd4ykHLBXLIHXMmWVZySEhCSZ6RddRFJ88njPyDv u0F5yiYYPonrNsNcG5u/4iJ9QieJcqUFr5sL4Nauo+sZUPEb54i3ElcvyOR69wf20L9Z CT5Vb5sUmicwbOuy8v6EfIoj2OB5cHcPjJ2infB7X/sy2XuvWvptqoXv0PpNbHGCJSWM qo5gVJ1nO8eWf0SKBlgD7m/G5SAakA1O/f+gmoy70jSkAIFhNZ0LW60sIhRMntYCss8u W8pQ4cGgkdSF8sd6Eum+dmEIn80vGoKmKo5XOXcV5doHhY+iP+YibHRtUts5Xl61+Mtp zWLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6HBBi46aLE4tojLHuhD1zt9K6yB/yz+Q7GFJaWnW3r4=; b=DdVZmaFLHxaE/dhcV4kKgx1rU4lm+PnACnpw7fYBQV51XJY3BnwqBHFXP4+Ea8b/Aa iMZDLSCFcbayW9lykHrxcQ1xsSoJm0w+kC0FxA6Jo6C3uZq3r5qlfaPGuXCBeaqQbhyE ibs7sGFlLCydkLuMgbScUZ57LG1OrhZu6+fyaNS2hhbo75V4Vc/2wlx/B/E+505O0FqE 02JMWha3cLQm00bUtscmyYDMkcGD8djk/H+NEWgesC8a6mu+k7JFNZNLQQQHLaR49uZF 77x2ighGuI5j9lxvPtMFtlvNzIX9A2AKJpZM32c0bivU5cnZ78OcReUel3Hr048V4+aJ 0pMw== X-Gm-Message-State: AOAM532n69SAn4wVCp8z1YStgpzSkCbEtHmcJFjLua0u4+ccnHN9N7YN q7wvOMlHLRRqUTyPZnjFZKuPYEzsWQhDeg== X-Google-Smtp-Source: ABdhPJxo7kfaKZ/A1ePEynF2YRfTPvHEewKKaKv+wArUCjuqE1u9jFWCIMHT9jIYa+rd6dz/PpP5cw== X-Received: by 2002:a05:6512:32ab:: with SMTP id q11mr9345479lfe.417.1613863761486; Sat, 20 Feb 2021 15:29:21 -0800 (PST) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f5sm1462931ljc.8.2021.02.20.15.29.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Feb 2021 15:29:21 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Nick Connolly , Dmitry Kozlyuk , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam , Ray Kinsella , Neil Horman Date: Sun, 21 Feb 2021 02:29:06 +0300 Message-Id: <20210220232910.772-4-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210220232910.772-1-dmitry.kozliuk@gmail.com> References: <20210220232910.772-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 3/7] eal: add sleep API 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" POSIX sleep(3) is missing from Windows. Add generic rte_thread_sleep() to suspend current OS thread. Signed-off-by: Dmitry Kozlyuk --- lib/librte_eal/common/eal_common_timer.c | 5 +++-- lib/librte_eal/include/rte_thread.h | 11 +++++++++++ lib/librte_eal/rte_eal_exports.def | 2 ++ lib/librte_eal/unix/rte_thread.c | 6 ++++++ lib/librte_eal/version.map | 3 +++ lib/librte_eal/windows/eal_thread.c | 9 ++++++++- 6 files changed, 33 insertions(+), 3 deletions(-) diff --git a/lib/librte_eal/common/eal_common_timer.c b/lib/librte_eal/common/eal_common_timer.c index 71e0bd035..0e89a4f7d 100644 --- a/lib/librte_eal/common/eal_common_timer.c +++ b/lib/librte_eal/common/eal_common_timer.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "eal_private.h" #include "eal_memcfg.h" @@ -47,9 +48,9 @@ estimate_tsc_freq(void) #define CYC_PER_10MHZ 1E7 RTE_LOG(WARNING, EAL, "WARNING: TSC frequency estimated roughly" " - clock timings may be less accurate.\n"); - /* assume that the sleep(1) will sleep for 1 second */ + /* assume that the rte_thread_sleep(1) will sleep for 1 second */ uint64_t start = rte_rdtsc(); - sleep(1); + rte_thread_sleep(1); /* Round up to 10Mhz. 1E7 ~ 10Mhz */ return RTE_ALIGN_MUL_NEAR(rte_rdtsc() - start, CYC_PER_10MHZ); } diff --git a/lib/librte_eal/include/rte_thread.h b/lib/librte_eal/include/rte_thread.h index e640ea185..f0c12dd79 100644 --- a/lib/librte_eal/include/rte_thread.h +++ b/lib/librte_eal/include/rte_thread.h @@ -106,6 +106,17 @@ int rte_thread_tls_value_set(rte_tls_key key, const void *value); __rte_experimental void *rte_thread_tls_value_get(rte_tls_key key); +/** + * Suspend current OS thread for the specified time, yielding CPU to scheduler. + * + * @param sec + * Number of seconds to sleep. The system may return control later, + * but not earlier. Zero value always yields the CPU, but control may be + * returned immediately. + */ +__rte_experimental +void rte_thread_sleep(unsigned int sec); + #ifdef __cplusplus } #endif diff --git a/lib/librte_eal/rte_eal_exports.def b/lib/librte_eal/rte_eal_exports.def index 474cf123f..494240b94 100644 --- a/lib/librte_eal/rte_eal_exports.def +++ b/lib/librte_eal/rte_eal_exports.def @@ -334,3 +334,5 @@ EXPORTS rte_mem_map rte_mem_page_size rte_mem_unmap + + rte_thread_sleep diff --git a/lib/librte_eal/unix/rte_thread.c b/lib/librte_eal/unix/rte_thread.c index 86ffeebc9..029d39dd4 100644 --- a/lib/librte_eal/unix/rte_thread.c +++ b/lib/librte_eal/unix/rte_thread.c @@ -84,3 +84,9 @@ rte_thread_tls_value_get(rte_tls_key key) } return pthread_getspecific(key->thread_index); } + +void +rte_thread_sleep(unsigned int sec) +{ + sleep(sec); +} diff --git a/lib/librte_eal/version.map b/lib/librte_eal/version.map index fce90a112..106864469 100644 --- a/lib/librte_eal/version.map +++ b/lib/librte_eal/version.map @@ -412,6 +412,9 @@ EXPERIMENTAL { rte_thread_tls_key_delete; rte_thread_tls_value_get; rte_thread_tls_value_set; + + # added in 21.05 + rte_thread_sleep; }; INTERNAL { diff --git a/lib/librte_eal/windows/eal_thread.c b/lib/librte_eal/windows/eal_thread.c index 908e726d1..957792301 100644 --- a/lib/librte_eal/windows/eal_thread.c +++ b/lib/librte_eal/windows/eal_thread.c @@ -11,9 +11,10 @@ #include #include #include -#include +#include #include "eal_private.h" +#include "eal_thread.h" #include "eal_windows.h" /* @@ -154,3 +155,9 @@ rte_thread_setname(__rte_unused pthread_t id, __rte_unused const char *name) /* This is a stub, not the expected result */ return 0; } + +void +rte_thread_sleep(unsigned int sec) +{ + return Sleep(MS_PER_S * sec); +} From patchwork Sat Feb 20 23:29:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88042 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 DF618A0524; Sun, 21 Feb 2021 00:29:49 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CF1D422A26C; Sun, 21 Feb 2021 00:29:26 +0100 (CET) Received: from mail-lj1-f174.google.com (mail-lj1-f174.google.com [209.85.208.174]) by mails.dpdk.org (Postfix) with ESMTP id 13CDA22A25C for ; Sun, 21 Feb 2021 00:29:23 +0100 (CET) Received: by mail-lj1-f174.google.com with SMTP id e17so44069613ljl.8 for ; Sat, 20 Feb 2021 15:29:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=q+E/j9rsoTh5jsrgzXTnX1xc/HqsqwkQuhT6CzsAzWE=; b=NvXCyvg2tLaLzxJLuliqwA9sRgfnw8dlXy26ZYwjGK/AUDNpOURlzt78l1fquyxEQE 4YEcLyfsKkpm6yxi8JBlDBM8gEJGDFtIUMWl8EkIbzeVhrkj5b5qG8Kw+4a5RRUw/bor NdQZ0sRTcA3ySChvXXcepjHqY8dtzrXOd4TfacmDjaOdhk/sFT0xce5F6EpT/U1EoxUH 7EBdcQSFihJ0wyJn33G4vZa1Ykrj66p/BtfQ2QGx0CqTrcn2YEk9qDH7tSJFFCEERyBK 6jwPTyMsOedY1Ej1N/T5i0Ga6Xhx4J0d+g2+NnyEEz3EOdDNQFtRA+k5O1Gy7ec/M7Bl NkhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=q+E/j9rsoTh5jsrgzXTnX1xc/HqsqwkQuhT6CzsAzWE=; b=TPrHC1LTxtePWVYXujaWEl1ZUfqSWHhc1EXG/DVprtwLWEmVwN9ywdRWKvky5z+Ql2 gj3VdHNHmeCOeZj4TVq+qk4D4pAdcSF54BPpwV4UVWMHDXnYBA+y2IjY8qrEU6RXW9xg uucHCaoYy5yxHybzFCZqszU3oC8xcg69Wp9AyaDIoyve/3XlE/auXlLrLlzO16fIdlyR 7Y1wRDty+vjE6S2/zxgJPvdYgv5j75SQXHsvriBtZiNQs/IaLLJIGZGlJrEFbC0Sx4CS zn2K0SX77wy6GsT7vzwZ/c5ahNIGwZzeSJug8/A4+LHciitDJQOOow0AaDJ36EuDac84 tRyw== X-Gm-Message-State: AOAM530gLohaDE7uyxzzGzlJ8kSE0RrXVCPUVbDdlKHQ1OtzUD2wLvSb 9G++M8mnWscmeAY/W5EEawXmqt3lhdqhlw== X-Google-Smtp-Source: ABdhPJzqkHiGt30I0rujDpX0H3Ckqevw8wUknlriS91nD2wnzHVPHyNtuK0esclkknakhIZOtfdDSA== X-Received: by 2002:a05:651c:101:: with SMTP id a1mr6264345ljb.363.1613863762365; Sat, 20 Feb 2021 15:29:22 -0800 (PST) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f5sm1462931ljc.8.2021.02.20.15.29.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Feb 2021 15:29:22 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Nick Connolly , Dmitry Kozlyuk , Jerin Jacob , Sunil Kumar Kori , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam Date: Sun, 21 Feb 2021 02:29:07 +0300 Message-Id: <20210220232910.772-5-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210220232910.772-1-dmitry.kozliuk@gmail.com> References: <20210220232910.772-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 4/7] eal: add asprintf() internal wrapper 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" POSIX asprintf() is unavailable on Windows. Add eal_asprintf() wrapper for EAL internal use. On Windows it's a function, on Unix it's a macro for asprintf(). Signed-off-by: Dmitry Kozlyuk --- lib/librte_eal/common/eal_common_lcore.c | 2 +- lib/librte_eal/common/eal_common_options.c | 8 ++--- lib/librte_eal/common/eal_common_trace.c | 2 +- lib/librte_eal/common/eal_common_trace_ctf.c | 2 +- .../common/eal_common_trace_utils.c | 2 +- lib/librte_eal/common/eal_private.h | 18 +++++++++++ lib/librte_eal/windows/eal.c | 30 +++++++++++++++++++ 7 files changed, 56 insertions(+), 8 deletions(-) diff --git a/lib/librte_eal/common/eal_common_lcore.c b/lib/librte_eal/common/eal_common_lcore.c index 66d6bad1a..db16a34cc 100644 --- a/lib/librte_eal/common/eal_common_lcore.c +++ b/lib/librte_eal/common/eal_common_lcore.c @@ -282,7 +282,7 @@ rte_lcore_callback_register(const char *name, rte_lcore_init_cb init, callback = calloc(1, sizeof(*callback)); if (callback == NULL) return NULL; - if (asprintf(&callback->name, "%s-%p", name, arg) == -1) { + if (eal_asprintf(&callback->name, "%s-%p", name, arg) == -1) { free(callback); return NULL; } diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index bad389903..275f879d7 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -1435,7 +1435,7 @@ available_cores(void) return NULL; /* first sequence */ - if (asprintf(&str, "%d", idx) < 0) + if (eal_asprintf(&str, "%d", idx) < 0) return NULL; previous = idx; sequence = 0; @@ -1452,7 +1452,7 @@ available_cores(void) /* finish current sequence */ if (sequence) { - if (asprintf(&tmp, "%s-%d", str, previous) < 0) { + if (eal_asprintf(&tmp, "%s-%d", str, previous) < 0) { free(str); return NULL; } @@ -1461,7 +1461,7 @@ available_cores(void) } /* new sequence */ - if (asprintf(&tmp, "%s,%d", str, idx) < 0) { + if (eal_asprintf(&tmp, "%s,%d", str, idx) < 0) { free(str); return NULL; } @@ -1473,7 +1473,7 @@ available_cores(void) /* finish last sequence */ if (sequence) { - if (asprintf(&tmp, "%s-%d", str, previous) < 0) { + if (eal_asprintf(&tmp, "%s-%d", str, previous) < 0) { free(str); return NULL; } diff --git a/lib/librte_eal/common/eal_common_trace.c b/lib/librte_eal/common/eal_common_trace.c index 24e27387b..d57bb8ecc 100644 --- a/lib/librte_eal/common/eal_common_trace.c +++ b/lib/librte_eal/common/eal_common_trace.c @@ -435,7 +435,7 @@ __rte_trace_point_emit_field(size_t sz, const char *in, const char *datatype) fixup = trace_metadata_fixup_field(in); if (fixup != NULL) in = fixup; - rc = asprintf(&field, "%s %s %s;\n", + rc = eal_asprintf(&field, "%s %s %s;\n", RTE_PER_LCORE(ctf_field) != NULL ? RTE_PER_LCORE(ctf_field) : "", datatype, in); diff --git a/lib/librte_eal/common/eal_common_trace_ctf.c b/lib/librte_eal/common/eal_common_trace_ctf.c index 4041d9af6..31df7262e 100644 --- a/lib/librte_eal/common/eal_common_trace_ctf.c +++ b/lib/librte_eal/common/eal_common_trace_ctf.c @@ -389,7 +389,7 @@ char *trace_metadata_fixup_field(const char *field) for (i = 0; i < RTE_DIM(ctf_reserved_words); i++) { if (strcmp(field, ctf_reserved_words[i]) != 0) continue; - if (asprintf(&out, "_%s", ctf_reserved_words[i]) == -1) + if (eal_asprintf(&out, "_%s", ctf_reserved_words[i]) == -1) out = NULL; return out; } diff --git a/lib/librte_eal/common/eal_common_trace_utils.c b/lib/librte_eal/common/eal_common_trace_utils.c index 6b81fdeec..1773140ac 100644 --- a/lib/librte_eal/common/eal_common_trace_utils.c +++ b/lib/librte_eal/common/eal_common_trace_utils.c @@ -253,7 +253,7 @@ eal_trace_dir_args_save(char const *val) return -ENAMETOOLONG; } - if (asprintf(&dir_path, "%s/", val) == -1) { + if (eal_asprintf(&dir_path, "%s/", val) == -1) { trace_err("failed to copy directory: %s", strerror(errno)); return -ENOMEM; } diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h index 4684c4c7d..a5d9c5123 100644 --- a/lib/librte_eal/common/eal_private.h +++ b/lib/librte_eal/common/eal_private.h @@ -738,4 +738,22 @@ void __rte_thread_init(unsigned int lcore_id, rte_cpuset_t *cpuset); */ void __rte_thread_uninit(void); +/** + * Allocate a buffer large enough to hold the formatted string + * and perform formatting, equivalent to Unix asprintf(3). + * + * @param buffer + * Receives a pointer to allocated memory, call free(buffer) to deallocate. + * @param format + * Format string. + * @return + * Number of bytes allocated on success, (-1) on failure. + */ +#ifdef RTE_EXEC_ENV_WINDOWS +__rte_format_printf(2, 3) +int eal_asprintf(char **buffer, const char *format, ...); +#else +#define eal_asprintf asprintf +#endif + #endif /* _EAL_PRIVATE_H_ */ diff --git a/lib/librte_eal/windows/eal.c b/lib/librte_eal/windows/eal.c index 1e5f6576f..47495b36a 100644 --- a/lib/librte_eal/windows/eal.c +++ b/lib/librte_eal/windows/eal.c @@ -2,6 +2,8 @@ * Copyright(c) 2019 Intel Corporation */ +#include + #include #include #include @@ -410,6 +412,34 @@ rte_eal_init(int argc, char **argv) return fctret; } +/* Don't use MinGW asprintf() to have identical code with all toolchains. */ +int +eal_asprintf(char **buffer, const char *format, ...) +{ + int size, ret; + va_list arg; + + va_start(arg, format); + size = vsnprintf(NULL, 0, format, arg); + va_end(arg); + if (size < 0) + return -1; + size++; + + *buffer = malloc(size); + if (*buffer == NULL) + return -1; + + va_start(arg, format); + ret = vsnprintf(*buffer, size, format, arg); + va_end(arg); + if (ret != size - 1) { + free(*buffer); + return -1; + } + return ret; +} + int rte_vfio_container_dma_map(__rte_unused int container_fd, __rte_unused uint64_t vaddr, From patchwork Sat Feb 20 23:29:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88043 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 E6F5BA0524; Sun, 21 Feb 2021 00:29:55 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1A64222A276; Sun, 21 Feb 2021 00:29:28 +0100 (CET) Received: from mail-lj1-f179.google.com (mail-lj1-f179.google.com [209.85.208.179]) by mails.dpdk.org (Postfix) with ESMTP id D099F22A26A for ; Sun, 21 Feb 2021 00:29:23 +0100 (CET) Received: by mail-lj1-f179.google.com with SMTP id u4so44084179ljh.6 for ; Sat, 20 Feb 2021 15:29:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=r8bmfTIjhTMfqOSZTKeB2VL8S+Pg71ymVvNvcArd5ZA=; b=thjK6gDf9Gr+mR+1lDJrkr5wvRJlT7aGtLLyoHnOpBGN9kAtFKAkMiR6GdjzDErltq J+QKf2VyEJln+ssvUlG4LsRERmhtjtg4RfOEhtm9UjsgWk99HvR4F72NHNKAV+6Mw02B sWXPHkOrPUr2VYzap62kMEH+LqO5hmw8a99F6ovdM4hYX2ZJ2+C/NKMYwgEnRTfnedm/ 6yFNHsjzkBwRZns9FF/9lJQNEFhLWyaxbP6YiLK57Hi0wrCnVJb7OlwxVJ+nTTenVI+4 5emf/pLlHITSPoLyxx4FwjWookT5eSz8n4CJvWZaHqmQDv05VCMnmOFLOeavhCSWiacP sSmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=r8bmfTIjhTMfqOSZTKeB2VL8S+Pg71ymVvNvcArd5ZA=; b=J0byp0iuaO6gHTgCTzJ3QyYg5Q6HzHK7mbT8YraY2o56gLFS6xhX1UlzjIcw3rgRo5 YU+kPF1IJ0o8q+yMTdwUIr7Tj36LEboJ+CnDIOg7DQSmbWs0J/x6lVf04LjhW9v5ICvt JjyTt2jTM8QgxHg87Ltb2TFeLCIPouJ5fFH7/0XNnVIx+dHRpxxU5g65RPMOfAjy8s31 OKMT5AEIheNUN0nCw2cQvwXmKL8KAgjGnKtqrb6sqqCcLiGgEy8pTmkckU6gpBdIE+he Fc2IHFes3ZDX60ZANfDuh4ehv2B/jIXAeVH5dWRv1bM8FO24XoL4sjPuMaRWL0wJJB1E OW3A== X-Gm-Message-State: AOAM533qeDEA8FT6lS5C5jqTieLaL+Rmnf5oejWEuiqd2WGeNvErmki0 n2+Gbju3dqfOKRI3Yx6FCe1LTqmRL3Y0O7VQ X-Google-Smtp-Source: ABdhPJzQP0bRm3qij3TqtVmALlMVdVw+OQpGkUmPtEFmnuTrghR9FZTUU2hcxtn6ZPcjwZ/7w9piAQ== X-Received: by 2002:a05:6512:ac4:: with SMTP id n4mr9272107lfu.622.1613863763266; Sat, 20 Feb 2021 15:29:23 -0800 (PST) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f5sm1462931ljc.8.2021.02.20.15.29.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Feb 2021 15:29:22 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Nick Connolly , Dmitry Kozlyuk , Olivier Matz , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko Date: Sun, 21 Feb 2021 02:29:08 +0300 Message-Id: <20210220232910.772-6-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210220232910.772-1-dmitry.kozliuk@gmail.com> References: <20210220232910.772-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 5/7] lib: remove POSIX dependencies 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" Replace POSIX strtok_r() with EAL rte_strtok(). Replace POSIX strdup() with EAL rte_strdup(). Locally rename Windows _close() to standard close(). Signed-off-by: Dmitry Kozlyuk --- lib/librte_cmdline/cmdline.c | 1 + lib/librte_ethdev/rte_class_eth.c | 2 +- lib/librte_ethdev/rte_ethdev.c | 2 +- lib/librte_kvargs/rte_kvargs.c | 17 ++++++++++------- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/librte_cmdline/cmdline.c b/lib/librte_cmdline/cmdline.c index 79ea5f98c..4dfa1178f 100644 --- a/lib/librte_cmdline/cmdline.c +++ b/lib/librte_cmdline/cmdline.c @@ -19,6 +19,7 @@ #include "cmdline_private.h" #ifdef RTE_EXEC_ENV_WINDOWS +#define close _close #define write _write #endif diff --git a/lib/librte_ethdev/rte_class_eth.c b/lib/librte_ethdev/rte_class_eth.c index ca2ce87f7..9b72bdf15 100644 --- a/lib/librte_ethdev/rte_class_eth.c +++ b/lib/librte_ethdev/rte_class_eth.c @@ -73,7 +73,7 @@ eth_representor_cmp(const char *key __rte_unused, return -1; /* not a representor port */ /* Parse devargs representor values. */ - values = strdup(value); + values = rte_strdup(value); if (values == NULL) return -1; memset(&representors, 0, sizeof(representors)); diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 6f514c388..a09fec2ce 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -5515,7 +5515,7 @@ eth_dev_devargs_tokenise(struct rte_kvargs *arglist, const char *str_in) struct rte_kvargs_pair *pair; char *letter; - arglist->str = strdup(str_in); + arglist->str = rte_strdup(str_in); if (arglist->str == NULL) return -ENOMEM; diff --git a/lib/librte_kvargs/rte_kvargs.c b/lib/librte_kvargs/rte_kvargs.c index 285081c86..fd1103b33 100644 --- a/lib/librte_kvargs/rte_kvargs.c +++ b/lib/librte_kvargs/rte_kvargs.c @@ -26,20 +26,22 @@ rte_kvargs_tokenize(struct rte_kvargs *kvlist, const char *params) /* Copy the const char *params to a modifiable string * to pass to rte_strsplit */ - kvlist->str = strdup(params); + kvlist->str = rte_strdup(params); if (kvlist->str == NULL) return -1; /* browse each key/value pair and add it in kvlist */ str = kvlist->str; - while ((str = strtok_r(str, RTE_KVARGS_PAIRS_DELIM, &ctx1)) != NULL) { + while ((str = rte_strtok(str, RTE_KVARGS_PAIRS_DELIM, &ctx1)) != NULL) { i = kvlist->count; if (i >= RTE_KVARGS_MAX) return -1; - kvlist->pairs[i].key = strtok_r(str, RTE_KVARGS_KV_DELIM, &ctx2); - kvlist->pairs[i].value = strtok_r(NULL, RTE_KVARGS_KV_DELIM, &ctx2); + kvlist->pairs[i].key = rte_strtok( + str, RTE_KVARGS_KV_DELIM, &ctx2); + kvlist->pairs[i].value = rte_strtok( + NULL, RTE_KVARGS_KV_DELIM, &ctx2); if (kvlist->pairs[i].key == NULL || kvlist->pairs[i].value == NULL) return -1; @@ -49,12 +51,13 @@ rte_kvargs_tokenize(struct rte_kvargs *kvlist, const char *params) if (str[0] == '[') { /* Find the end of the list. */ while (str[strlen(str) - 1] != ']') { - /* Restore the comma erased by strtok_r(). */ + /* Restore the comma erased by rte_strtok(). */ if (ctx1 == NULL || ctx1[0] == '\0') return -1; /* no closing bracket */ str[strlen(str)] = ','; /* Parse until next comma. */ - str = strtok_r(NULL, RTE_KVARGS_PAIRS_DELIM, &ctx1); + str = rte_strtok( + NULL, RTE_KVARGS_PAIRS_DELIM, &ctx1); if (str == NULL) return -1; /* no closing bracket */ } @@ -199,7 +202,7 @@ rte_kvargs_parse_delim(const char *args, const char * const valid_keys[], if (valid_ends == NULL) return rte_kvargs_parse(args, valid_keys); - copy = strdup(args); + copy = rte_strdup(args); if (copy == NULL) return NULL; From patchwork Sat Feb 20 23:29:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88044 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 DE200A0524; Sun, 21 Feb 2021 00:30:01 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5ECB522A271; Sun, 21 Feb 2021 00:29:29 +0100 (CET) Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) by mails.dpdk.org (Postfix) with ESMTP id CAA9522A266 for ; Sun, 21 Feb 2021 00:29:24 +0100 (CET) Received: by mail-lj1-f180.google.com with SMTP id k22so44109584ljg.3 for ; Sat, 20 Feb 2021 15:29:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SJsXGjv6vFj7rCJC2wTkCfJ4Dt82EHLOPNnfE9uWfZo=; b=ZgGClD3wmxOtIP597mSIbIUjv6OKIcVvSP1I3iWJ8KXT2BUsmiiGm2c7vp0HzxCT/J eLxJXKV1oc+fsRv5Mtsm2kmuh7Cgx8iFJm6SkjdHV+tW0U5BE1ePJbHBIUoI+LzQbzd2 Y3OZjcotIJh1FTyP24RsZ+WTULrSNf0/9+0lgerd+C88Q+vlAGjk04Pr9pOH2YYUH+6X t2lbYHJKJvaVTfGAJD9OEcRcHs6IdFcDXzVYUhJYjQKrB835njgjGVfZrUlyj3aoIfGE jw7mO+cByU+b0IMmoXqwDmV3IZxQM+SZLjwe9J9pNAtSYQBhJnWDgIUAvzhZ5yxgnlxn h21Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=SJsXGjv6vFj7rCJC2wTkCfJ4Dt82EHLOPNnfE9uWfZo=; b=hjXbVGnKjGqQ0qSGOGk6DfzxZ2S+gBEYiovVv5PoW3LCpCy1NzrOo6IePshFyxACpa VvBtXYlbhz90J7eHLHkXC3HcHY41Kna0jCZl5LcYMOvOp7c4trqDW4R3zjcZOSeydPGf V8eZ/3gaxh0joOFDIinEro/FMN6wDB2Q5+m6H0cUwrmszKzr/9eeKjzzubEXu6e4vMnB SNq1jMS8Q8N1xVZjjkjTX5/QoxuxIgM9Qn+2vqhWctuz4GhxQoXhoEe4PRLSRwCVpnfM H6DJGddeaDbjhP5s6LFCKaTIeNvEvcLIu7ahkIxuRkViZIfW8PWzxOANpqlq4pLs0w8C MVVA== X-Gm-Message-State: AOAM5318zGHcs3+VveamBJgHJwDv6U+UBE+pwVluk2PjKiiUZDylsAPP N7Pooh6PBqxMohU2gUmvZvOKPw+fWkuoHhmF X-Google-Smtp-Source: ABdhPJxRytcOZIIN8iZfcVo823Mn4I2RtXxoLH+G2K/by1kMzrNixDDtBi4nef6xIWR/rKnHAMkgjQ== X-Received: by 2002:a2e:7007:: with SMTP id l7mr9493683ljc.176.1613863764159; Sat, 20 Feb 2021 15:29:24 -0800 (PST) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f5sm1462931ljc.8.2021.02.20.15.29.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Feb 2021 15:29:23 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Nick Connolly , Dmitry Kozlyuk , Matan Azrad , Shahaf Shuler , Viacheslav Ovsiienko , Beilei Xing , Jeff Guo Date: Sun, 21 Feb 2021 02:29:09 +0300 Message-Id: <20210220232910.772-7-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210220232910.772-1-dmitry.kozliuk@gmail.com> References: <20210220232910.772-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 6/7] drivers: remove POSIX dependencies 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" Replace POSIX strncasecmp() with EAL rte_strncasecmp(). Replace POSIX strtok_r() with EAL rte_strtok(). Replace POSIX strdup() with EAL rte_strdup(). Signed-off-by: Dmitry Kozlyuk --- i40e: checkpatches.sh complains about long lines (it's ~85). I doubt that mechanical fix would keep the code readable. It's on 5th level of indentation, so I'd extract a function, but would like to hear from maintainers first. drivers/bus/pci/private.h | 2 +- drivers/bus/vdev/vdev.c | 4 +- drivers/bus/vdev/vdev_params.c | 3 +- drivers/common/mlx5/mlx5_common_pci.c | 4 +- drivers/net/i40e/i40e_ethdev.c | 56 +++++++++++++-------------- 5 files changed, 35 insertions(+), 34 deletions(-) diff --git a/drivers/bus/pci/private.h b/drivers/bus/pci/private.h index f566943f5..5648916d1 100644 --- a/drivers/bus/pci/private.h +++ b/drivers/bus/pci/private.h @@ -92,7 +92,7 @@ struct mapped_pci_resource { TAILQ_ENTRY(mapped_pci_resource) next; struct rte_pci_addr pci_addr; - char path[PATH_MAX]; + char path[RTE_PATH_MAX]; int nb_maps; struct pci_map maps[PCI_MAX_RESOURCE]; struct pci_msix_table msix_table; diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c index 9a673347a..a490d26a2 100644 --- a/drivers/bus/vdev/vdev.c +++ b/drivers/bus/vdev/vdev.c @@ -245,9 +245,9 @@ alloc_devargs(const char *name, const char *args) devargs->bus = &rte_vdev_bus; if (args) - devargs->args = strdup(args); + devargs->args = rte_strdup(args); else - devargs->args = strdup(""); + devargs->args = rte_strdup(""); ret = strlcpy(devargs->name, name, sizeof(devargs->name)); if (ret < 0 || ret >= (int)sizeof(devargs->name)) { diff --git a/drivers/bus/vdev/vdev_params.c b/drivers/bus/vdev/vdev_params.c index 6f74704d1..64848f4c2 100644 --- a/drivers/bus/vdev/vdev_params.c +++ b/drivers/bus/vdev/vdev_params.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "vdev_logs.h" #include "vdev_private.h" @@ -31,7 +32,7 @@ vdev_dev_match(const struct rte_device *dev, char *name; /* cannot pass const dev->name to rte_kvargs_process() */ - name = strdup(dev->name); + name = rte_strdup(dev->name); if (name == NULL) return -1; ret = rte_kvargs_process(kvlist, diff --git a/drivers/common/mlx5/mlx5_common_pci.c b/drivers/common/mlx5/mlx5_common_pci.c index 2b657686d..37f4182e2 100644 --- a/drivers/common/mlx5/mlx5_common_pci.c +++ b/drivers/common/mlx5/mlx5_common_pci.c @@ -88,7 +88,7 @@ bus_cmdline_options_handler(__rte_unused const char *key, return *ret; } nstr_org = nstr; - found = strtok_r(nstr, ":", &refstr); + found = rte_strtok(nstr, ":", &refstr); if (!found) goto err; do { @@ -102,7 +102,7 @@ bus_cmdline_options_handler(__rte_unused const char *key, goto err; } *ret |= class_val; - found = strtok_r(NULL, ":", &refstr); + found = rte_strtok(NULL, ":", &refstr); } while (found); err: free(nstr_org); diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index d7cd04989..5b806d201 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -12036,110 +12036,110 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg, memset(name, 0, sizeof(name)); strcpy(name, proto[n].name); PMD_DRV_LOG(INFO, "name = %s\n", name); - if (!strncasecmp(name, "PPPOE", 5)) + if (!rte_strncasecmp(name, "PPPOE", 5)) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L2_ETHER_PPPOE; - else if (!strncasecmp(name, "IPV4FRAG", 8) && + else if (!rte_strncasecmp(name, "IPV4FRAG", 8) && !in_tunnel) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_L3_IPV4_EXT_UNKNOWN; ptype_mapping[i].sw_ptype |= RTE_PTYPE_L4_FRAG; - } else if (!strncasecmp(name, "IPV4FRAG", 8) && + } else if (!rte_strncasecmp(name, "IPV4FRAG", 8) && in_tunnel) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN; ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L4_FRAG; - } else if (!strncasecmp(name, "OIPV4", 5)) { + } else if (!rte_strncasecmp(name, "OIPV4", 5)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_L3_IPV4_EXT_UNKNOWN; in_tunnel = true; - } else if (!strncasecmp(name, "IPV4", 4) && + } else if (!rte_strncasecmp(name, "IPV4", 4) && !in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L3_IPV4_EXT_UNKNOWN; - else if (!strncasecmp(name, "IPV4", 4) && + else if (!rte_strncasecmp(name, "IPV4", 4) && in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN; - else if (!strncasecmp(name, "IPV6FRAG", 8) && + else if (!rte_strncasecmp(name, "IPV6FRAG", 8) && !in_tunnel) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_L3_IPV6_EXT_UNKNOWN; ptype_mapping[i].sw_ptype |= RTE_PTYPE_L4_FRAG; - } else if (!strncasecmp(name, "IPV6FRAG", 8) && + } else if (!rte_strncasecmp(name, "IPV6FRAG", 8) && in_tunnel) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN; ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L4_FRAG; - } else if (!strncasecmp(name, "OIPV6", 5)) { + } else if (!rte_strncasecmp(name, "OIPV6", 5)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_L3_IPV6_EXT_UNKNOWN; in_tunnel = true; - } else if (!strncasecmp(name, "IPV6", 4) && + } else if (!rte_strncasecmp(name, "IPV6", 4) && !in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L3_IPV6_EXT_UNKNOWN; - else if (!strncasecmp(name, "IPV6", 4) && + else if (!rte_strncasecmp(name, "IPV6", 4) && in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN; - else if (!strncasecmp(name, "UDP", 3) && + else if (!rte_strncasecmp(name, "UDP", 3) && !in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L4_UDP; - else if (!strncasecmp(name, "UDP", 3) && + else if (!rte_strncasecmp(name, "UDP", 3) && in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L4_UDP; - else if (!strncasecmp(name, "TCP", 3) && + else if (!rte_strncasecmp(name, "TCP", 3) && !in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L4_TCP; - else if (!strncasecmp(name, "TCP", 3) && + else if (!rte_strncasecmp(name, "TCP", 3) && in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L4_TCP; - else if (!strncasecmp(name, "SCTP", 4) && + else if (!rte_strncasecmp(name, "SCTP", 4) && !in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L4_SCTP; - else if (!strncasecmp(name, "SCTP", 4) && + else if (!rte_strncasecmp(name, "SCTP", 4) && in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L4_SCTP; - else if ((!strncasecmp(name, "ICMP", 4) || - !strncasecmp(name, "ICMPV6", 6)) && + else if ((!rte_strncasecmp(name, "ICMP", 4) || + !rte_strncasecmp(name, "ICMPV6", 6)) && !in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L4_ICMP; - else if ((!strncasecmp(name, "ICMP", 4) || - !strncasecmp(name, "ICMPV6", 6)) && + else if ((!rte_strncasecmp(name, "ICMP", 4) || + !rte_strncasecmp(name, "ICMPV6", 6)) && in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L4_ICMP; - else if (!strncasecmp(name, "GTPC", 4)) { + else if (!rte_strncasecmp(name, "GTPC", 4)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_TUNNEL_GTPC; in_tunnel = true; - } else if (!strncasecmp(name, "GTPU", 4)) { + } else if (!rte_strncasecmp(name, "GTPU", 4)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_TUNNEL_GTPU; in_tunnel = true; - } else if (!strncasecmp(name, "ESP", 3)) { + } else if (!rte_strncasecmp(name, "ESP", 3)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_TUNNEL_ESP; in_tunnel = true; - } else if (!strncasecmp(name, "GRENAT", 6)) { + } else if (!rte_strncasecmp(name, "GRENAT", 6)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_TUNNEL_GRENAT; in_tunnel = true; - } else if (!strncasecmp(name, "L2TPV2CTL", 9) || - !strncasecmp(name, "L2TPV2", 6) || - !strncasecmp(name, "L2TPV3", 6)) { + } else if (!rte_strncasecmp(name, "L2TPV2CTL", 9) || + !rte_strncasecmp(name, "L2TPV2", 6) || + !rte_strncasecmp(name, "L2TPV3", 6)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_TUNNEL_L2TP; in_tunnel = true; From patchwork Sat Feb 20 23:29:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88045 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 E5A0EA0524; Sun, 21 Feb 2021 00:30:07 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B68D722A27C; Sun, 21 Feb 2021 00:29:30 +0100 (CET) Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) by mails.dpdk.org (Postfix) with ESMTP id BD62522A26A for ; Sun, 21 Feb 2021 00:29:25 +0100 (CET) Received: by mail-lj1-f182.google.com with SMTP id k22so44109650ljg.3 for ; Sat, 20 Feb 2021 15:29:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VGTbFC6BAAP7FC4WGTcjkH+HAq6/LlWUGZSmcrrUGZE=; b=mEAQboZlThxTXcTS9tDzCCqqvt7SnVJUqkzp8WHMDNJvRi+srL/u5BqsL4Rtn0YcLr ogcZNaCYVjkqj8m/4koi3eAobYYWUJhIKFlc/8Geb1pviHeO8tH8i/Yk7jvs5fyGlGHL bb8OWiy3sG6zojV6mO6CcYFFapwqTyQ/GvtRi8YhTWMZS7z++CD3mv0VuFLSOxO10r7A BCP/WtmO4LrOQv2i1/FKN+rtCJY11OBhQB2KmM9XKIlYRVfuFd0vCIBmaf/kNIN4YwgT +vlb7o3zwQ4Jn+l0VBP7eoWwF/7ql2UoKAuh92dOtDOj1xeW2EdIhjGIaPI2t6njCMWS wbNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VGTbFC6BAAP7FC4WGTcjkH+HAq6/LlWUGZSmcrrUGZE=; b=TJRKYLdA2GpVYb1TsT6tqT0KRUBnS3hGRKTkgUC3P55hYqpo3cqxyuO8MSYFM6MvXV TArGscrIA+HABebVCnBqYuhiCbM0U36Qzeq2rxNNpXFTpefCRtpuX2NDiWsVYDARBz4Q qPoKEB+G48iAWdisjLVth1mOAreb7fNO3UwwlVxJfYTQucGITR0ABWtsM9DFsALJkONn LALuwBSurZ1pNwGtW0Kns7TAplcC8l0H29KYUkgzxlKxoiyzjpTOaV7FFOGqO/X4YOtr JQi/qi9OM3jLMezU/YvafdYR6qaSebmA2dlad2vbEDp1uxkYAzn39KF1D8xKJDjiqCVB //sA== X-Gm-Message-State: AOAM530oTKL6PhjXvwjcVxUF9gO333YAyfA6/gq/c6LAel7PEF67xCHd obB9z7Sf0PvMTbqJlvn0SJkAXxXstjmOo5F9 X-Google-Smtp-Source: ABdhPJxb2l6s8BVNi9jhRnHSyhRi77ai0DFmDR2VHTUBUW50n6fGqxZBEC0sRFp9Fcm2pe8Vg/3CxA== X-Received: by 2002:a2e:5805:: with SMTP id m5mr9765953ljb.77.1613863765084; Sat, 20 Feb 2021 15:29:25 -0800 (PST) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f5sm1462931ljc.8.2021.02.20.15.29.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Feb 2021 15:29:24 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Nick Connolly , Dmitry Kozlyuk , Bruce Richardson , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam Date: Sun, 21 Feb 2021 02:29:10 +0300 Message-Id: <20210220232910.772-8-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210220232910.772-1-dmitry.kozliuk@gmail.com> References: <20210220232910.772-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 7/7] eal/windows: do not expose POSIX symbols 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" Exposing POSIX symbols could break consumer POSIX compatibility code. * Make renaming of close() and unlink() private to EAL. * Remove renaming of strncasecmp(), strtok_r(), and sleep() in favor of using EAL wrappers. Similarly remove PATH_MAX macro. * Replace index(3p), which is not available on Windows, with strchr(3), as recommended by POSIX.1-2008. strerror_r() is only used inside EAL, rename it only where it's needed. Same for asprintf(), it has an internal EAL wrapper and is removed from public API. Signed-off-by: Dmitry Kozlyuk --- doc/guides/rel_notes/release_21_05.rst | 9 ++ lib/librte_eal/common/eal_common_errno.c | 4 + lib/librte_eal/common/eal_common_options.c | 2 +- lib/librte_eal/common/eal_private.h | 5 ++ lib/librte_eal/freebsd/include/rte_os.h | 4 +- lib/librte_eal/linux/include/rte_os.h | 4 +- lib/librte_eal/windows/include/rte_os.h | 99 ++-------------------- 7 files changed, 29 insertions(+), 98 deletions(-) diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst index 5aa9ed7db..6380dfa53 100644 --- a/doc/guides/rel_notes/release_21_05.rst +++ b/doc/guides/rel_notes/release_21_05.rst @@ -84,6 +84,15 @@ API Changes Also, make sure to start the actual text at the margin. ======================================================= +* eal/windows: Removed POSIX symbols from EAL headers. Exposing POSIX symbols + has been incorrect and could conflict with consumer POSIX implementations. + Wrappers are provided for + ``strtok_r(3p)`` (``rte_strtok``), + ``strncasecmp(3p)`` (``rte_strncasecmp``), + ``sleep(3p)`` (``rte_thread_sleep``), + ``PATH_MAX`` (``RTE_PATH_MAX``). + Removed are ``strerror_r(3p)`` and ``asprintf(3p)``. + ABI Changes ----------- diff --git a/lib/librte_eal/common/eal_common_errno.c b/lib/librte_eal/common/eal_common_errno.c index 2a10fb823..536eea0c3 100644 --- a/lib/librte_eal/common/eal_common_errno.c +++ b/lib/librte_eal/common/eal_common_errno.c @@ -15,6 +15,10 @@ #include #include +#ifdef RTE_EXEC_ENV_WINDOWS +#define strerror_r(a, b, c) strerror_s(b, c, a) +#endif + RTE_DEFINE_PER_LCORE(int, _rte_errno); const char * diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 275f879d7..fd3b22e8a 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -1936,7 +1936,7 @@ eal_check_common_options(struct internal_config *internal_cfg) RTE_LOG(ERR, EAL, "Invalid length of --" OPT_MBUF_POOL_OPS_NAME" option\n"); return -1; } - if (index(eal_get_hugefile_prefix(), '%') != NULL) { + if (strchr(eal_get_hugefile_prefix(), '%') != NULL) { RTE_LOG(ERR, EAL, "Invalid char, '%%', in --"OPT_FILE_PREFIX" " "option\n"); return -1; diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h index a5d9c5123..860551661 100644 --- a/lib/librte_eal/common/eal_private.h +++ b/lib/librte_eal/common/eal_private.h @@ -756,4 +756,9 @@ int eal_asprintf(char **buffer, const char *format, ...); #define eal_asprintf asprintf #endif +#ifdef RTE_EXEC_ENV_WINDOWS +#define close _close +#define unlink _unlink +#endif + #endif /* _EAL_PRIVATE_H_ */ diff --git a/lib/librte_eal/freebsd/include/rte_os.h b/lib/librte_eal/freebsd/include/rte_os.h index b37d59b5e..a5bf10021 100644 --- a/lib/librte_eal/freebsd/include/rte_os.h +++ b/lib/librte_eal/freebsd/include/rte_os.h @@ -6,9 +6,9 @@ #define _RTE_OS_H_ /** - * This is header should contain any function/macro definition + * This header should contain any function/macro definition * which are not supported natively or named differently in the - * freebsd OS. Functions will be added in future releases. + * freebsd OS. It must not define symbols without "rte_" prefix. */ #include diff --git a/lib/librte_eal/linux/include/rte_os.h b/lib/librte_eal/linux/include/rte_os.h index af7d052d9..04f510eec 100644 --- a/lib/librte_eal/linux/include/rte_os.h +++ b/lib/librte_eal/linux/include/rte_os.h @@ -6,9 +6,9 @@ #define _RTE_OS_H_ /** - * This is header should contain any function/macro definition + * This header should contain any function/macro definition * which are not supported natively or named differently in the - * linux OS. Functions will be added in future releases. + * linux OS. It must not define symbols without "rte_" prefix. */ #include diff --git a/lib/librte_eal/windows/include/rte_os.h b/lib/librte_eal/windows/include/rte_os.h index edca11bd2..9c9c31214 100644 --- a/lib/librte_eal/windows/include/rte_os.h +++ b/lib/librte_eal/windows/include/rte_os.h @@ -6,15 +6,11 @@ #define _RTE_OS_H_ /** - * This is header should contain any function/macro definition - * which are not supported natively or named differently in the - * Windows OS. It must not include Windows-specific headers. + * This header should contain any function/macro definition + * which are not supported natively or named differently in Windows OS. */ -#include -#include #include -#include #ifdef __cplusplus extern "C" { @@ -22,101 +18,18 @@ extern "C" { #define RTE_PATH_MAX _MAX_PATH -/* limits.h replacement, value as in */ -#ifndef PATH_MAX -#define PATH_MAX _MAX_PATH -#endif - -#ifndef sleep -#define sleep(x) Sleep(1000 * (x)) -#endif - -#ifndef strerror_r -#define strerror_r(a, b, c) strerror_s(b, c, a) -#endif - -#ifndef strdup -/* strdup is deprecated in Microsoft libc and _strdup is preferred */ -#define strdup(str) _strdup(str) -#endif - -#ifndef strtok_r -#define strtok_r(str, delim, saveptr) strtok_s(str, delim, saveptr) -#endif - -#ifndef index -#define index(a, b) strchr(a, b) -#endif - -#ifndef rindex -#define rindex(a, b) strrchr(a, b) -#endif - -#ifndef strncasecmp -#define strncasecmp(s1, s2, count) _strnicmp(s1, s2, count) -#endif - -#ifndef close -#define close _close -#endif - -#ifndef unlink -#define unlink _unlink -#endif - /* cpu_set macros implementation */ #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) CPU_FILL(set) #define RTE_CPU_NOT(dst, src) CPU_NOT(dst, src) -/* as in */ +/* This is an exception without "rte_" prefix, because Windows does have + * ssize_t, but it's defined in which we avoid to expose. + * If ssize_t is defined in user code, it necessarily has the same type. + */ typedef long long ssize_t; -#ifndef RTE_TOOLCHAIN_GCC - -static inline int -asprintf(char **buffer, const char *format, ...) -{ - int size, ret; - va_list arg; - - va_start(arg, format); - size = vsnprintf(NULL, 0, format, arg); - va_end(arg); - if (size < 0) - return -1; - size++; - - *buffer = (char *)malloc(size); - if (*buffer == NULL) - return -1; - - va_start(arg, format); - ret = vsnprintf(*buffer, size, format, arg); - va_end(arg); - if (ret != size - 1) { - free(*buffer); - return -1; - } - return ret; -} - -static inline const char * -eal_strerror(int code) -{ - static char buffer[128]; - - strerror_s(buffer, sizeof(buffer), code); - return buffer; -} - -#ifndef strerror -#define strerror eal_strerror -#endif - -#endif /* RTE_TOOLCHAIN_GCC */ - #ifdef __cplusplus } #endif