From patchwork Mon Nov 4 11:09:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147907 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 926E745C76; Mon, 4 Nov 2024 12:10:41 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7CD6240E20; Mon, 4 Nov 2024 12:10:41 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 116054021F for ; Mon, 4 Nov 2024 12:10:40 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.174]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Xhpbk3MNpzfdh3; Mon, 4 Nov 2024 19:08:02 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 6A6E4140137; Mon, 4 Nov 2024 19:10:38 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:38 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 01/52] eal: fix use rte errno for libc function Date: Mon, 4 Nov 2024 19:09:46 +0800 Message-ID: <20241104111037.3632161-2-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 In the libc function, rte_errno is not assigned a value. Therefore, errno should be used instead of it. Fixes: c4b89ecb64ea ("eal: introduce memory management wrappers") Cc: stable@dpdk.org Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- lib/eal/unix/eal_unix_memory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/eal/unix/eal_unix_memory.c b/lib/eal/unix/eal_unix_memory.c index 97969a401b..4fd066a290 100644 --- a/lib/eal/unix/eal_unix_memory.c +++ b/lib/eal/unix/eal_unix_memory.c @@ -84,7 +84,7 @@ eal_mem_set_dump(void *virt, size_t size, bool dump) int ret = madvise(virt, size, flags); if (ret) { EAL_LOG(DEBUG, "madvise(%p, %#zx, %d) failed: %s", - virt, size, flags, strerror(rte_errno)); + virt, size, flags, strerror(errno)); rte_errno = errno; } return ret; From patchwork Mon Nov 4 11:09:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147908 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 EBB8045C76; Mon, 4 Nov 2024 12:10:47 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 89C1940E2A; Mon, 4 Nov 2024 12:10:42 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 176AE402AF for ; Mon, 4 Nov 2024 12:10:40 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.48]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Xhpbk4ZXLzfdh4; Mon, 4 Nov 2024 19:08:02 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 949B5180064; Mon, 4 Nov 2024 19:10:38 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:38 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 02/52] devtools: forbid use of strerror Date: Mon, 4 Nov 2024 19:09:47 +0800 Message-ID: <20241104111037.3632161-3-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. rte_strerror() or strerror_r() has been provided in DPDK to replace it. In addition, replace strerror_s with strerror_r on the Windows platform. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- devtools/checkpatches.sh | 8 ++++++++ lib/eal/windows/include/rte_os_shim.h | 1 + 2 files changed, 9 insertions(+) diff --git a/devtools/checkpatches.sh b/devtools/checkpatches.sh index 4a8591be22..c9ee3550c1 100755 --- a/devtools/checkpatches.sh +++ b/devtools/checkpatches.sh @@ -210,6 +210,14 @@ check_forbidden_additions() { # -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \ "$1" || res=1 + # refrain from using strerror() for drivers and libs + awk -v FOLDERS="lib drivers" \ + -v EXPRESSIONS="\\\sstrerror\\\(" \ + -v RET_ON_FAIL=1 \ + -v MESSAGE='Using strerror, prefer rte_strerror or strerror_r' \ + -f $(dirname $(readlink -f $0))/check-forbidden-tokens.awk \ + "$1" || res=1 + # refrain from using RTE_LOG_REGISTER for drivers and libs awk -v FOLDERS='lib drivers' \ -v EXPRESSIONS='\\' \ diff --git a/lib/eal/windows/include/rte_os_shim.h b/lib/eal/windows/include/rte_os_shim.h index eda8113662..2bac31e716 100644 --- a/lib/eal/windows/include/rte_os_shim.h +++ b/lib/eal/windows/include/rte_os_shim.h @@ -20,6 +20,7 @@ #define strdup(str) _strdup(str) #define strtok_r(str, delim, saveptr) strtok_s(str, delim, saveptr) +#define strerror_r(errnum, buf, buflen) strerror_s(buf, buflen, errnum) #ifndef RTE_TOOLCHAIN_GCC #define strcasecmp(s1, s2) _stricmp(s1, s2) #define strncasecmp(s1, s2, count) _strnicmp(s1, s2, count) From patchwork Mon Nov 4 11:09:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147936 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 6A3DB45C76; Mon, 4 Nov 2024 12:14:04 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D35FB4278C; Mon, 4 Nov 2024 12:11:19 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 1978040E21 for ; Mon, 4 Nov 2024 12:10:42 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.105]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4XhpdT6j3WzQrQn; Mon, 4 Nov 2024 19:09:33 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id E197C1402C8; Mon, 4 Nov 2024 19:10:38 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:38 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 03/52] eal: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:09:48 +0800 Message-ID: <20241104111037.3632161-4-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- lib/eal/common/eal_common_fbarray.c | 6 +- lib/eal/common/eal_common_options.c | 19 ++-- lib/eal/common/eal_common_proc.c | 32 +++++-- lib/eal/common/eal_common_trace_utils.c | 14 ++- lib/eal/freebsd/eal.c | 10 +- lib/eal/freebsd/eal_interrupts.c | 26 ++++-- lib/eal/freebsd/eal_memory.c | 6 +- lib/eal/freebsd/eal_timer.c | 22 +++-- lib/eal/include/rte_errno.h | 3 + lib/eal/linux/eal.c | 25 +++-- lib/eal/linux/eal_dev.c | 5 +- lib/eal/linux/eal_hugepage_info.c | 17 ++-- lib/eal/linux/eal_interrupts.c | 51 +++++++--- lib/eal/linux/eal_memalloc.c | 118 ++++++++++++++++++------ lib/eal/linux/eal_memory.c | 102 ++++++++++++++------ lib/eal/linux/eal_timer.c | 6 +- lib/eal/linux/eal_vfio.c | 102 ++++++++++++++------ lib/eal/unix/eal_filesystem.c | 12 ++- lib/eal/unix/eal_unix_memory.c | 19 +++- lib/eal/unix/rte_thread.c | 18 ++-- 20 files changed, 446 insertions(+), 167 deletions(-) diff --git a/lib/eal/common/eal_common_fbarray.c b/lib/eal/common/eal_common_fbarray.c index 22b43073c6..f288bd9163 100644 --- a/lib/eal/common/eal_common_fbarray.c +++ b/lib/eal/common/eal_common_fbarray.c @@ -985,6 +985,7 @@ rte_fbarray_detach(struct rte_fbarray *arr) int rte_fbarray_destroy(struct rte_fbarray *arr) { + char errmsg[RTE_STRERR_BUFSIZE]; struct mem_area *tmp = NULL; size_t mmap_len; int fd, ret; @@ -1040,8 +1041,9 @@ rte_fbarray_destroy(struct rte_fbarray *arr) /* we're OK to destroy the file */ eal_get_fbarray_path(path, sizeof(path), arr->name); if (unlink(path)) { - EAL_LOG(DEBUG, "Cannot unlink fbarray: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(DEBUG, "Cannot unlink fbarray: %s", errmsg); rte_errno = errno; /* * we're still holding an exclusive lock, so drop it to diff --git a/lib/eal/common/eal_common_options.c b/lib/eal/common/eal_common_options.c index f1a5e329a5..f516b72fbf 100644 --- a/lib/eal/common/eal_common_options.c +++ b/lib/eal/common/eal_common_options.c @@ -44,6 +44,7 @@ #ifndef RTE_EXEC_ENV_WINDOWS #include "eal_trace.h" #endif +#include #define BITS_PER_HEX 4 #define LCORE_OPT_LST 1 @@ -401,6 +402,7 @@ eal_plugins_init(void) static int eal_plugindir_init(const char *path) { + char errmsg[RTE_STRERR_BUFSIZE]; DIR *d = NULL; struct dirent *dent = NULL; char sopath[PATH_MAX]; @@ -410,8 +412,9 @@ eal_plugindir_init(const char *path) d = opendir(path); if (d == NULL) { - EAL_LOG(ERR, "failed to open directory %s: %s", - path, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "failed to open directory %s: %s", path, errmsg); return -1; } @@ -443,6 +446,7 @@ eal_plugindir_init(const char *path) static int verify_perms(const char *dirpath) { + char errmsg[RTE_STRERR_BUFSIZE]; struct stat st; /* if not root, check down one level first */ @@ -462,8 +466,9 @@ verify_perms(const char *dirpath) /* call stat to check for permissions and ensure not world writable */ if (stat(dirpath, &st) != 0) { - EAL_LOG(ERR, "Error with stat on %s, %s", - dirpath, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "Error with stat on %s, %s", dirpath, errmsg); return -1; } if (st.st_mode & S_IWOTH) { @@ -479,6 +484,7 @@ verify_perms(const char *dirpath) static void * eal_dlopen(const char *pathname) { + char errmsg[RTE_STRERR_BUFSIZE]; void *retval = NULL; char *realp = realpath(pathname, NULL); @@ -490,8 +496,9 @@ eal_dlopen(const char *pathname) return retval; } if (realp == NULL) { - EAL_LOG(ERR, "Error with realpath for %s, %s", - pathname, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "Error with realpath for %s, %s", pathname, errmsg); goto out; } if (strnlen(realp, PATH_MAX) == PATH_MAX) { diff --git a/lib/eal/common/eal_common_proc.c b/lib/eal/common/eal_common_proc.c index d24093937c..0e857102c6 100644 --- a/lib/eal/common/eal_common_proc.c +++ b/lib/eal/common/eal_common_proc.c @@ -268,6 +268,7 @@ read_msg(int fd, struct mp_msg_internal *m, struct sockaddr_un *s) char control[CMSG_SPACE(sizeof(m->msg.fds))]; struct cmsghdr *cmsg; int buflen = sizeof(*m) - sizeof(m->msg.fds); + char errmsg[RTE_STRERR_BUFSIZE]; memset(&msgh, 0, sizeof(msgh)); iov.iov_base = m; @@ -291,7 +292,9 @@ read_msg(int fd, struct mp_msg_internal *m, struct sockaddr_un *s) if (errno == EINTR) goto retry; - EAL_LOG(ERR, "recvmsg failed, %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "recvmsg failed, %s", errmsg); return -1; } @@ -561,6 +564,7 @@ async_reply_handle(void *arg) static int open_socket_fd(void) { + char errmsg[RTE_STRERR_BUFSIZE]; struct sockaddr_un un; peer_name[0] = '\0'; @@ -582,8 +586,9 @@ open_socket_fd(void) unlink(un.sun_path); /* May still exist since last run */ if (bind(mp_fd, (struct sockaddr *)&un, sizeof(un)) < 0) { - EAL_LOG(ERR, "failed to bind %s: %s", - un.sun_path, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "failed to bind %s: %s", un.sun_path, errmsg); close(mp_fd); return -1; } @@ -605,6 +610,7 @@ close_socket_fd(int fd) int rte_mp_channel_init(void) { + char errmsg[RTE_STRERR_BUFSIZE]; char path[PATH_MAX]; int dir_fd; const struct internal_config *internal_conf = @@ -630,14 +636,16 @@ rte_mp_channel_init(void) /* lock the directory */ dir_fd = open(mp_dir_path, O_RDONLY); if (dir_fd < 0) { - EAL_LOG(ERR, "failed to open %s: %s", - mp_dir_path, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "failed to open %s: %s", mp_dir_path, errmsg); return -1; } if (flock(dir_fd, LOCK_EX)) { - EAL_LOG(ERR, "failed to lock %s: %s", - mp_dir_path, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "failed to lock %s: %s", mp_dir_path, errmsg); close(dir_fd); return -1; } @@ -649,8 +657,9 @@ rte_mp_channel_init(void) if (rte_thread_create_internal_control(&mp_handle_tid, "mp-msg", mp_handle, NULL) < 0) { - EAL_LOG(ERR, "failed to create mp thread: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "failed to create mp thread: %s", errmsg); close(dir_fd); close(rte_atomic_exchange_explicit(&mp_fd, -1, rte_memory_order_relaxed)); return -1; @@ -691,6 +700,7 @@ send_msg(const char *dst_path, struct rte_mp_msg *msg, int type) struct cmsghdr *cmsg; struct sockaddr_un dst; struct mp_msg_internal m; + char errmsg[RTE_STRERR_BUFSIZE]; int fd_size = msg->num_fds * sizeof(int); char control[CMSG_SPACE(fd_size)]; @@ -732,8 +742,10 @@ send_msg(const char *dst_path, struct rte_mp_msg *msg, int type) unlink(dst_path); return 0; } + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "failed to send to (%s) due to %s", - dst_path, strerror(errno)); + dst_path, errmsg); return -1; } diff --git a/lib/eal/common/eal_common_trace_utils.c b/lib/eal/common/eal_common_trace_utils.c index 7282715b11..868b28490c 100644 --- a/lib/eal/common/eal_common_trace_utils.c +++ b/lib/eal/common/eal_common_trace_utils.c @@ -241,11 +241,14 @@ eal_trace_mode_args_save(const char *val) int eal_trace_dir_args_save(char const *val) { + char errmsg[RTE_STRERR_BUFSIZE]; char *dir_path; int rc; if (asprintf(&dir_path, "%s/", val) == -1) { - trace_err("failed to copy directory: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + trace_err("failed to copy directory: %s", errmsg); return -ENOMEM; } @@ -304,6 +307,7 @@ static int trace_mkdir(void) { struct trace *trace = trace_obj_get(); + char errmsg[RTE_STRERR_BUFSIZE]; static bool already_done; char *session; int rc; @@ -329,7 +333,9 @@ trace_mkdir(void) /* Create the path if it t exist, no "mkdir -p" available here */ rc = mkdir(trace->dir, 0700); if (rc < 0 && errno != EEXIST) { - trace_err("mkdir %s failed [%s]", trace->dir, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + trace_err("mkdir %s failed [%s]", trace->dir, errmsg); rte_errno = errno; return -rte_errno; } @@ -344,7 +350,9 @@ trace_mkdir(void) rc = mkdir(trace->dir, 0700); if (rc < 0) { - trace_err("mkdir %s failed [%s]", trace->dir, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + trace_err("mkdir %s failed [%s]", trace->dir, errmsg); rte_errno = errno; return -rte_errno; } diff --git a/lib/eal/freebsd/eal.c b/lib/eal/freebsd/eal.c index 1229230063..0fc318acdb 100644 --- a/lib/eal/freebsd/eal.c +++ b/lib/eal/freebsd/eal.c @@ -177,6 +177,7 @@ rte_eal_config_create(void) static int rte_eal_config_attach(void) { + char errmsg[RTE_STRERR_BUFSIZE]; void *rte_mem_cfg_addr; const char *pathname = eal_runtime_config_path(); struct rte_config *config = rte_eal_get_configuration(); @@ -202,8 +203,10 @@ rte_eal_config_attach(void) if (rte_mem_cfg_addr == MAP_FAILED) { close(mem_cfg_fd); mem_cfg_fd = -1; + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot mmap memory for rte_config! error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -1; } @@ -217,6 +220,7 @@ static int rte_eal_config_reattach(void) { struct rte_mem_config *mem_config; + char errmsg[RTE_STRERR_BUFSIZE]; void *rte_mem_cfg_addr; struct rte_config *config = rte_eal_get_configuration(); const struct internal_config *internal_conf = @@ -249,8 +253,10 @@ rte_eal_config_reattach(void) munmap(mem_config, sizeof(struct rte_mem_config)); return -1; } + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot mmap memory for rte_config! error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -1; } diff --git a/lib/eal/freebsd/eal_interrupts.c b/lib/eal/freebsd/eal_interrupts.c index 23747babc2..73fb732c01 100644 --- a/lib/eal/freebsd/eal_interrupts.c +++ b/lib/eal/freebsd/eal_interrupts.c @@ -85,6 +85,7 @@ rte_intr_callback_register(const struct rte_intr_handle *intr_handle, rte_intr_callback_fn cb, void *cb_arg) { struct rte_intr_callback *callback; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_intr_source *src; int ret = 0, add_event = 0; @@ -183,10 +184,13 @@ rte_intr_callback_register(const struct rte_intr_handle *intr_handle, if (errno == ENODEV) EAL_LOG(DEBUG, "Interrupt handle %d not supported", rte_intr_fd_get(src->intr_handle)); - else + else { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Error adding fd %d kevent, %s", rte_intr_fd_get(src->intr_handle), - strerror(errno)); + errmsg); + } ret = -errno; goto fail; } @@ -273,6 +277,7 @@ rte_intr_callback_unregister(const struct rte_intr_handle *intr_handle, { int ret; struct rte_intr_source *src; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_intr_callback *cb, *next; /* do parameter checking first */ @@ -321,9 +326,10 @@ rte_intr_callback_unregister(const struct rte_intr_handle *intr_handle, * remove intr file descriptor from wait list. */ if (kevent(kq, &ke, 1, NULL, 0, NULL) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Error removing fd %d kevent, %s", - rte_intr_fd_get(src->intr_handle), - strerror(errno)); + rte_intr_fd_get(src->intr_handle), errmsg); /* removing non-existent even is an expected condition * in some circumstances (e.g. oneshot events). */ @@ -462,6 +468,7 @@ eal_intr_process_interrupts(struct kevent *events, int nfds) struct rte_intr_callback active_cb; union rte_intr_read_buffer buf; struct rte_intr_callback *cb, *next; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_intr_source *src; bool call = false; int n, bytes_read; @@ -513,10 +520,10 @@ eal_intr_process_interrupts(struct kevent *events, int nfds) if (errno == EINTR || errno == EWOULDBLOCK) continue; + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Error reading from file " - "descriptor %d: %s", - event_fd, - strerror(errno)); + "descriptor %d: %s", event_fd, errmsg); } else if (bytes_read == 0) EAL_LOG(ERR, "Read nothing from file " "descriptor %d", event_fd); @@ -565,9 +572,12 @@ eal_intr_process_interrupts(struct kevent *events, int nfds) * remove intr file descriptor from wait list. */ if (kevent(kq, &ke, 1, NULL, 0, NULL) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), + "Unknown error %d", errno); EAL_LOG(ERR, "Error removing fd %d kevent, %s", rte_intr_fd_get(src->intr_handle), - strerror(errno)); + errmsg); /* removing non-existent even is an expected * condition in some circumstances * (e.g. oneshot events). diff --git a/lib/eal/freebsd/eal_memory.c b/lib/eal/freebsd/eal_memory.c index a6f3ba226e..840995799b 100644 --- a/lib/eal/freebsd/eal_memory.c +++ b/lib/eal/freebsd/eal_memory.c @@ -53,6 +53,7 @@ rte_mem_virt2iova(const void *virtaddr) int rte_eal_hugepage_init(void) { + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_mem_config *mcfg; uint64_t total_mem = 0; void *addr; @@ -84,8 +85,9 @@ rte_eal_hugepage_init(void) addr = mmap(NULL, mem_sz, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (addr == MAP_FAILED) { - EAL_LOG(ERR, "%s: mmap() failed: %s", __func__, - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "%s: mmap() failed: %s", __func__, errmsg); return -1; } diff --git a/lib/eal/freebsd/eal_timer.c b/lib/eal/freebsd/eal_timer.c index 4eba66eadb..ec5f4bf98d 100644 --- a/lib/eal/freebsd/eal_timer.c +++ b/lib/eal/freebsd/eal_timer.c @@ -15,6 +15,7 @@ #include #include #include +#include #include "eal_private.h" #include "eal_internal_cfg.h" @@ -28,6 +29,7 @@ enum timer_source eal_timer_source = EAL_TIMER_TSC; uint64_t get_tsc_freq(uint64_t arch_hz) { + char errmsg[RTE_STRERR_BUFSIZE]; size_t sz; int tmp; uint64_t tsc_hz; @@ -35,21 +37,27 @@ get_tsc_freq(uint64_t arch_hz) sz = sizeof(tmp); tmp = 0; - if (sysctlbyname("kern.timecounter.smp_tsc", &tmp, &sz, NULL, 0)) - EAL_LOG(WARNING, "%s", strerror(errno)); - else if (tmp != 1) + if (sysctlbyname("kern.timecounter.smp_tsc", &tmp, &sz, NULL, 0)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(WARNING, "%s", errmsg); + } else if (tmp != 1) EAL_LOG(WARNING, "TSC is not safe to use in SMP mode"); tmp = 0; - if (sysctlbyname("kern.timecounter.invariant_tsc", &tmp, &sz, NULL, 0)) - EAL_LOG(WARNING, "%s", strerror(errno)); - else if (tmp != 1) + if (sysctlbyname("kern.timecounter.invariant_tsc", &tmp, &sz, NULL, 0)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(WARNING, "%s", errmsg); + } else if (tmp != 1) EAL_LOG(WARNING, "TSC is not invariant"); sz = sizeof(tsc_hz); if (sysctlbyname("machdep.tsc_freq", &tsc_hz, &sz, NULL, 0)) { - EAL_LOG(WARNING, "%s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(WARNING, "%s", errmsg); return arch_hz; } diff --git a/lib/eal/include/rte_errno.h b/lib/eal/include/rte_errno.h index c49818a40e..10a04edbda 100644 --- a/lib/eal/include/rte_errno.h +++ b/lib/eal/include/rte_errno.h @@ -19,6 +19,9 @@ extern "C" { RTE_DECLARE_PER_LCORE(int, _rte_errno); /**< Per core error number. */ +/* For the buffer size of strerror_r */ +#define RTE_STRERR_BUFSIZE 256 + /** * Error number value, stored per-thread, which can be queried after * calls to certain functions to determine why those functions failed. diff --git a/lib/eal/linux/eal.c b/lib/eal/linux/eal.c index 54577b7718..1da56b9595 100644 --- a/lib/eal/linux/eal.c +++ b/lib/eal/linux/eal.c @@ -90,6 +90,7 @@ eal_clean_runtime_dir(void) "fbarray_*", "mp_socket_*" }; + char errmsg[RTE_STRERR_BUFSIZE]; /* open directory */ dir = opendir(runtime_dir); @@ -159,8 +160,9 @@ eal_clean_runtime_dir(void) if (dir) closedir(dir); - EAL_LOG(ERR, "Error while clearing runtime dir: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "Error while clearing runtime dir: %s", errmsg); return -1; } @@ -266,6 +268,7 @@ rte_eal_config_attach(void) struct rte_mem_config *mem_config; const struct internal_config *internal_conf = eal_get_internal_configuration(); + char errmsg[RTE_STRERR_BUFSIZE]; const char *pathname = eal_runtime_config_path(); @@ -287,8 +290,10 @@ rte_eal_config_attach(void) if (mem_config == MAP_FAILED) { close(mem_cfg_fd); mem_cfg_fd = -1; + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot mmap memory for rte_config! error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -1; } @@ -306,6 +311,7 @@ rte_eal_config_reattach(void) void *rte_mem_cfg_addr; const struct internal_config *internal_conf = eal_get_internal_configuration(); + char errmsg[RTE_STRERR_BUFSIZE]; if (internal_conf->no_shconf) return 0; @@ -334,8 +340,10 @@ rte_eal_config_reattach(void) munmap(mem_config, sizeof(struct rte_mem_config)); return -1; } + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot mmap memory for rte_config! error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -1; } @@ -1402,6 +1410,7 @@ rte_eal_vfio_get_vf_token(rte_uuid_t vf_token) int rte_eal_check_module(const char *module_name) { + char errmsg[RTE_STRERR_BUFSIZE]; char sysfs_mod_name[PATH_MAX]; struct stat st; int n; @@ -1411,8 +1420,10 @@ rte_eal_check_module(const char *module_name) /* Check if there is sysfs mounted */ if (stat("/sys/module", &st) != 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "sysfs is not mounted! error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -1; } @@ -1424,8 +1435,10 @@ rte_eal_check_module(const char *module_name) } if (stat(sysfs_mod_name, &st) != 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "Module %s not found! error %i (%s)", - sysfs_mod_name, errno, strerror(errno)); + sysfs_mod_name, errno, errmsg); return 0; } diff --git a/lib/eal/linux/eal_dev.c b/lib/eal/linux/eal_dev.c index e63f24d108..77688b2b19 100644 --- a/lib/eal/linux/eal_dev.c +++ b/lib/eal/linux/eal_dev.c @@ -62,6 +62,7 @@ sigbus_action_recover(void) static void sigbus_handler(int signum, siginfo_t *info, void *ctx __rte_unused) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret; EAL_LOG(DEBUG, "Thread catch SIGBUS, fault address:%p", @@ -71,9 +72,11 @@ static void sigbus_handler(int signum, siginfo_t *info, ret = rte_bus_sigbus_handler(info->si_addr); rte_spinlock_unlock(&failure_handle_lock); if (ret == -1) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); rte_exit(EXIT_FAILURE, "Failed to handle SIGBUS for hot-unplug, " - "(rte_errno: %s)!", strerror(rte_errno)); + "(rte_errno: %s)!", errmsg); } else if (ret == 1) { if (sigbus_action_old.sa_flags == SA_SIGINFO && sigbus_action_old.sa_sigaction) { diff --git a/lib/eal/linux/eal_hugepage_info.c b/lib/eal/linux/eal_hugepage_info.c index d47a19c56a..cb2a24e46d 100644 --- a/lib/eal/linux/eal_hugepage_info.c +++ b/lib/eal/linux/eal_hugepage_info.c @@ -23,6 +23,7 @@ #include #include #include "rte_string_fns.h" +#include #include "eal_private.h" #include "eal_internal_cfg.h" @@ -322,6 +323,7 @@ walk_hugedir(const char *hugedir, walk_hugedir_t *cb, void *user_data) struct dirent *dirent; int dir_fd, fd, lck_result; const char filter[] = "*map_*"; /* matches hugepage files */ + char errmsg[RTE_STRERR_BUFSIZE]; dir = opendir(hugedir); if (!dir) { @@ -376,9 +378,9 @@ walk_hugedir(const char *hugedir, walk_hugedir_t *cb, void *user_data) error: if (dir) closedir(dir); - - EAL_LOG(ERR, "Error while walking hugepage dir: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "Error while walking hugepage dir: %s", errmsg); return -1; } @@ -400,12 +402,15 @@ static void inspect_hugedir_cb(const struct walk_hugedir_data *whd) { uint64_t *total_size = whd->user_data; + char errmsg[RTE_STRERR_BUFSIZE]; struct stat st; - if (fstat(whd->file_fd, &st) < 0) + if (fstat(whd->file_fd, &st) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "%s(): stat(\"%s\") failed: %s", - __func__, whd->file_name, strerror(errno)); - else + __func__, whd->file_name, errmsg); + } else (*total_size) += st.st_size; } diff --git a/lib/eal/linux/eal_interrupts.c b/lib/eal/linux/eal_interrupts.c index 6436f796eb..fc0476d948 100644 --- a/lib/eal/linux/eal_interrupts.c +++ b/lib/eal/linux/eal_interrupts.c @@ -455,12 +455,15 @@ uio_intx_intr_enable(const struct rte_intr_handle *intr_handle) static int uio_intr_disable(const struct rte_intr_handle *intr_handle) { + char errmsg[RTE_STRERR_BUFSIZE]; const int value = 0; if (rte_intr_fd_get(intr_handle) < 0 || write(rte_intr_fd_get(intr_handle), &value, sizeof(value)) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Error disabling interrupts for fd %d (%s)", - rte_intr_fd_get(intr_handle), strerror(errno)); + rte_intr_fd_get(intr_handle), errmsg); return -1; } return 0; @@ -469,12 +472,15 @@ uio_intr_disable(const struct rte_intr_handle *intr_handle) static int uio_intr_enable(const struct rte_intr_handle *intr_handle) { + char errmsg[RTE_STRERR_BUFSIZE]; const int value = 1; if (rte_intr_fd_get(intr_handle) < 0 || write(rte_intr_fd_get(intr_handle), &value, sizeof(value)) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Error enabling interrupts for fd %d (%s)", - rte_intr_fd_get(intr_handle), strerror(errno)); + rte_intr_fd_get(intr_handle), errmsg); return -1; } return 0; @@ -903,6 +909,7 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds) struct rte_intr_callback *cb, *next; union rte_intr_read_buffer buf; struct rte_intr_callback active_cb; + char errmsg[RTE_STRERR_BUFSIZE]; for (n = 0; n < nfds; n++) { @@ -972,10 +979,11 @@ eal_intr_process_interrupts(struct epoll_event *events, int nfds) if (errno == EINTR || errno == EWOULDBLOCK) continue; + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Error reading from file " "descriptor %d: %s", - events[n].data.fd, - strerror(errno)); + events[n].data.fd, errmsg); /* * The device is unplugged or buggy, remove * it as an interrupt source and return to @@ -1114,6 +1122,7 @@ eal_intr_thread_main(__rte_unused void *arg) static struct epoll_event pipe_event = { .events = EPOLLIN | EPOLLPRI, }; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_intr_source *src; unsigned numfds = 0; @@ -1129,8 +1138,10 @@ eal_intr_thread_main(__rte_unused void *arg) */ if (epoll_ctl(pfd, EPOLL_CTL_ADD, intr_pipe.readfd, &pipe_event) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); rte_panic("Error adding fd to %d epoll_ctl, %s\n", - intr_pipe.readfd, strerror(errno)); + intr_pipe.readfd, errmsg); } numfds++; @@ -1151,9 +1162,10 @@ eal_intr_thread_main(__rte_unused void *arg) */ if (epoll_ctl(pfd, EPOLL_CTL_ADD, rte_intr_fd_get(src->intr_handle), &ev) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); rte_panic("Error adding fd %d epoll_ctl, %s\n", - rte_intr_fd_get(src->intr_handle), - strerror(errno)); + rte_intr_fd_get(src->intr_handle), errmsg); } else numfds++; @@ -1202,6 +1214,7 @@ rte_eal_intr_init(void) static void eal_intr_proc_rxtx_intr(int fd, const struct rte_intr_handle *intr_handle) { + char errmsg[RTE_STRERR_BUFSIZE]; union rte_intr_read_buffer buf; int bytes_read = 0; int nbytes; @@ -1242,9 +1255,10 @@ eal_intr_proc_rxtx_intr(int fd, const struct rte_intr_handle *intr_handle) if (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) continue; - EAL_LOG(ERR, - "Error reading from fd %d: %s", - fd, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "Error reading from fd %d: %s", + fd, errmsg); } else if (nbytes == 0) EAL_LOG(ERR, "Read nothing from fd %d", fd); return; @@ -1317,6 +1331,7 @@ eal_epoll_wait(int epfd, struct rte_epoll_event *events, int maxevents, int timeout, bool interruptible) { struct epoll_event evs[maxevents]; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if (!events) { @@ -1341,9 +1356,10 @@ eal_epoll_wait(int epfd, struct rte_epoll_event *events, else continue; } + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); /* epoll_wait fail */ - EAL_LOG(ERR, "epoll_wait returns with fail %s", - strerror(errno)); + EAL_LOG(ERR, "epoll_wait returns with fail %s", errmsg); rc = -1; break; } else { @@ -1390,6 +1406,7 @@ int rte_epoll_ctl(int epfd, int op, int fd, struct rte_epoll_event *event) { + char errmsg[RTE_STRERR_BUFSIZE]; struct epoll_event ev; if (!event) { @@ -1411,8 +1428,9 @@ rte_epoll_ctl(int epfd, int op, int fd, ev.events = event->epdata.event; if (epoll_ctl(epfd, op, fd, &ev) < 0) { - EAL_LOG(ERR, "Error op %d fd %d epoll_ctl, %s", - op, fd, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "Error op %d fd %d epoll_ctl, %s", op, fd, errmsg); if (op == EPOLL_CTL_ADD) /* rollback status when CTL_ADD fail */ rte_atomic_store_explicit(&event->status, RTE_EPOLL_INVALID, @@ -1513,6 +1531,7 @@ rte_intr_free_epoll_fd(struct rte_intr_handle *intr_handle) int rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd) { + char errmsg[RTE_STRERR_BUFSIZE]; uint32_t i; int fd; uint32_t n = RTE_MIN(nb_efd, (uint32_t)RTE_MAX_RXTX_INTR_VEC_ID); @@ -1523,9 +1542,11 @@ rte_intr_efd_enable(struct rte_intr_handle *intr_handle, uint32_t nb_efd) for (i = 0; i < n; i++) { fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "can't setup eventfd, error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -errno; } diff --git a/lib/eal/linux/eal_memalloc.c b/lib/eal/linux/eal_memalloc.c index e354efc95d..1bad18b4c0 100644 --- a/lib/eal/linux/eal_memalloc.c +++ b/lib/eal/linux/eal_memalloc.c @@ -31,6 +31,7 @@ #include #include #include +#include #include "eal_filesystem.h" #include "eal_internal_cfg.h" @@ -156,12 +157,16 @@ check_numa(void) static void prepare_numa(int *oldpolicy, struct bitmask *oldmask, int socket_id) { + char errmsg[RTE_STRERR_BUFSIZE]; + EAL_LOG(DEBUG, "Trying to obtain current memory policy."); if (get_mempolicy(oldpolicy, oldmask->maskp, oldmask->size + 1, 0, 0) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Failed to get current mempolicy: %s. " - "Assuming MPOL_DEFAULT.", strerror(errno)); + "Assuming MPOL_DEFAULT.", errmsg); *oldpolicy = MPOL_DEFAULT; } EAL_LOG(DEBUG, @@ -173,14 +178,17 @@ prepare_numa(int *oldpolicy, struct bitmask *oldmask, int socket_id) static void restore_numa(int *oldpolicy, struct bitmask *oldmask) { + char errmsg[RTE_STRERR_BUFSIZE]; + EAL_LOG(DEBUG, "Restoring previous memory policy: %d", *oldpolicy); if (*oldpolicy == MPOL_DEFAULT) { numa_set_localalloc(); } else if (set_mempolicy(*oldpolicy, oldmask->maskp, oldmask->size + 1) < 0) { - EAL_LOG(ERR, "Failed to restore mempolicy: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "Failed to restore mempolicy: %s", errmsg); numa_set_localalloc(); } numa_free_cpumask(oldmask); @@ -212,6 +220,7 @@ pagesz_flags(uint64_t page_sz) /* returns 1 on successful lock, 0 on unsuccessful lock, -1 on error */ static int lock(int fd, int type) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret; /* flock may be interrupted */ @@ -223,8 +232,10 @@ static int lock(int fd, int type) /* couldn't lock */ return 0; } else if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s(): error calling flock(): %s", - __func__, strerror(errno)); + __func__, errmsg); return -1; } /* lock was successful */ @@ -237,6 +248,7 @@ get_seg_memfd(struct hugepage_info *hi __rte_unused, unsigned int seg_idx __rte_unused) { #ifdef MEMFD_SUPPORTED + char errmsg[RTE_STRERR_BUFSIZE]; int fd; char segname[250]; /* as per manpage, limit is 249 bytes plus null */ @@ -251,8 +263,10 @@ get_seg_memfd(struct hugepage_info *hi __rte_unused, snprintf(segname, sizeof(segname), "seg_%i", list_idx); fd = memfd_create(segname, flags); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "%s(): memfd create failed: %s", - __func__, strerror(errno)); + __func__, errmsg); return -1; } fd_list[list_idx].memseg_list_fd = fd; @@ -265,8 +279,10 @@ get_seg_memfd(struct hugepage_info *hi __rte_unused, list_idx, seg_idx); fd = memfd_create(segname, flags); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "%s(): memfd create failed: %s", - __func__, strerror(errno)); + __func__, errmsg); return -1; } fd_list[list_idx].fds[seg_idx] = fd; @@ -282,6 +298,7 @@ get_seg_fd(char *path, int buflen, struct hugepage_info *hi, unsigned int list_idx, unsigned int seg_idx, bool *dirty) { + char errmsg[RTE_STRERR_BUFSIZE]; int fd; int *out_fd; struct stat st; @@ -316,8 +333,10 @@ get_seg_fd(char *path, int buflen, struct hugepage_info *hi, */ ret = stat(path, &st); if (ret < 0 && errno != ENOENT) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "%s(): stat() for '%s' failed: %s", - __func__, path, strerror(errno)); + __func__, path, errmsg); return -1; } if (!internal_conf->hugepage_file.unlink_existing && ret == 0 && @@ -342,8 +361,10 @@ get_seg_fd(char *path, int buflen, struct hugepage_info *hi, ret == 0) { /* coverity[toctou] */ if (unlink(path) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "%s(): could not remove '%s': %s", - __func__, path, strerror(errno)); + __func__, path, errmsg); return -1; } } @@ -351,14 +372,18 @@ get_seg_fd(char *path, int buflen, struct hugepage_info *hi, /* coverity[toctou] */ fd = open(path, O_CREAT | O_RDWR, 0600); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s(): open '%s' failed: %s", - __func__, path, strerror(errno)); + __func__, path, errmsg); return -1; } /* take out a read lock */ if (lock(fd, LOCK_SH) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s(): lock '%s' failed: %s", - __func__, path, strerror(errno)); + __func__, path, errmsg); close(fd); return -1; } @@ -372,15 +397,16 @@ resize_hugefile_in_memory(int fd, uint64_t fa_offset, { int flags = grow ? 0 : FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; /* grow or shrink the file */ ret = fallocate(fd, flags, fa_offset, page_sz); if (ret < 0) { - EAL_LOG(DEBUG, "%s(): fallocate() failed: %s", - __func__, - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(DEBUG, "%s(): fallocate() failed: %s", __func__, errmsg); return -1; } return 0; @@ -392,6 +418,7 @@ resize_hugefile_in_filesystem(int fd, uint64_t fa_offset, uint64_t page_sz, { const struct internal_config *internal_conf = eal_get_internal_configuration(); + char errmsg[RTE_STRERR_BUFSIZE]; bool again = false; do { @@ -414,8 +441,10 @@ resize_hugefile_in_filesystem(int fd, uint64_t fa_offset, uint64_t page_sz, *dirty = new_size <= cur_size; if (new_size > cur_size && ftruncate(fd, new_size) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "%s(): ftruncate() failed: %s", - __func__, strerror(errno)); + __func__, errmsg); return -1; } } else { @@ -449,9 +478,11 @@ resize_hugefile_in_filesystem(int fd, uint64_t fa_offset, uint64_t page_sz, again = true; fallocate_supported = 0; } else { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), + "Unknown error %d", errno); EAL_LOG(DEBUG, "%s(): fallocate() failed: %s", - __func__, - strerror(errno)); + __func__, errmsg); return -1; } } else { @@ -476,15 +507,20 @@ close_hugefile(int fd, char *path, int list_idx) { const struct internal_config *internal_conf = eal_get_internal_configuration(); + char errmsg[RTE_STRERR_BUFSIZE]; + /* * primary process must unlink the file, but only when not in in-memory * mode (as in that case there is no file to unlink). */ if (!internal_conf->in_memory && rte_eal_process_type() == RTE_PROC_PRIMARY && - unlink(path)) + unlink(path)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s(): unlinking '%s' failed: %s", - __func__, path, strerror(errno)); + __func__, path, errmsg); + } close(fd); fd_list[list_idx].memseg_list_fd = -1; @@ -519,6 +555,7 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, #ifdef RTE_EAL_NUMA_AWARE_HUGEPAGES int cur_socket_id = 0; #endif + char errmsg[RTE_STRERR_BUFSIZE]; uint64_t map_offset; rte_iova_t iova; void *va; @@ -584,15 +621,19 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, } else { map_offset = 0; if (ftruncate(fd, alloc_sz) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "%s(): ftruncate() failed: %s", - __func__, strerror(errno)); + __func__, errmsg); goto resized; } if (internal_conf->hugepage_file.unlink_before_mapping && !internal_conf->in_memory) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); if (unlink(path)) { EAL_LOG(DEBUG, "%s(): unlink() failed: %s", - __func__, strerror(errno)); + __func__, errmsg); goto resized; } } @@ -610,8 +651,9 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, map_offset); if (va == MAP_FAILED) { - EAL_LOG(DEBUG, "%s(): mmap() failed: %s", __func__, - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(DEBUG, "%s(): mmap() failed: %s", __func__, errmsg); /* mmap failed, but the previous region might have been * unmapped anyway. try to remap it */ @@ -661,8 +703,9 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, ret = get_mempolicy(&cur_socket_id, NULL, 0, addr, MPOL_F_NODE | MPOL_F_ADDR); if (ret < 0) { - EAL_LOG(DEBUG, "%s(): get_mempolicy: %s", - __func__, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(DEBUG, "%s(): get_mempolicy: %s", __func__, errmsg); goto mapped; } else if (cur_socket_id != socket_id) { EAL_LOG(DEBUG, @@ -821,6 +864,7 @@ alloc_seg_walk(const struct rte_memseg_list *msl, void *arg) unsigned int msl_idx, need, i; const struct internal_config *internal_conf = eal_get_internal_configuration(); + char errmsg[RTE_STRERR_BUFSIZE]; if (msl->page_sz != wa->page_sz) return 0; @@ -873,14 +917,18 @@ alloc_seg_walk(const struct rte_memseg_list *msl, void *arg) if (wa->hi->lock_descriptor == -1 && !internal_conf->in_memory) { dir_fd = open(wa->hi->hugedir, O_RDONLY); if (dir_fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s(): Cannot open '%s': %s", - __func__, wa->hi->hugedir, strerror(errno)); + __func__, wa->hi->hugedir, errmsg); return -1; } /* blocking writelock */ if (flock(dir_fd, LOCK_EX)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s(): Cannot lock '%s': %s", - __func__, wa->hi->hugedir, strerror(errno)); + __func__, wa->hi->hugedir, errmsg); close(dir_fd); return -1; } @@ -951,6 +999,7 @@ free_seg_walk(const struct rte_memseg_list *msl, void *arg) struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; struct rte_memseg_list *found_msl; struct free_walk_param *wa = arg; + char errmsg[RTE_STRERR_BUFSIZE]; uintptr_t start_addr, end_addr; int msl_idx, seg_idx, ret, dir_fd = -1; const struct internal_config *internal_conf = @@ -980,14 +1029,18 @@ free_seg_walk(const struct rte_memseg_list *msl, void *arg) if (wa->hi->lock_descriptor == -1 && !internal_conf->in_memory) { dir_fd = open(wa->hi->hugedir, O_RDONLY); if (dir_fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s(): Cannot open '%s': %s", - __func__, wa->hi->hugedir, strerror(errno)); + __func__, wa->hi->hugedir, errmsg); return -1; } /* blocking writelock */ if (flock(dir_fd, LOCK_EX)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s(): Cannot lock '%s': %s", - __func__, wa->hi->hugedir, strerror(errno)); + __func__, wa->hi->hugedir, errmsg); close(dir_fd); return -1; } @@ -1335,6 +1388,7 @@ sync_existing(struct rte_memseg_list *primary_msl, struct rte_memseg_list *local_msl, struct hugepage_info *hi, unsigned int msl_idx) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret, dir_fd; /* do not allow any page allocations during the time we're allocating, @@ -1344,14 +1398,18 @@ sync_existing(struct rte_memseg_list *primary_msl, */ dir_fd = open(hi->hugedir, O_RDONLY); if (dir_fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s(): Cannot open '%s': %s", __func__, - hi->hugedir, strerror(errno)); + hi->hugedir, errmsg); return -1; } /* blocking writelock */ if (flock(dir_fd, LOCK_EX)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s(): Cannot lock '%s': %s", __func__, - hi->hugedir, strerror(errno)); + hi->hugedir, errmsg); close(dir_fd); return -1; } diff --git a/lib/eal/linux/eal_memory.c b/lib/eal/linux/eal_memory.c index 45879ca743..59be005b4b 100644 --- a/lib/eal/linux/eal_memory.c +++ b/lib/eal/linux/eal_memory.c @@ -90,6 +90,7 @@ uint64_t eal_get_baseaddr(void) phys_addr_t rte_mem_virt2phy(const void *virtaddr) { + char errmsg[RTE_STRERR_BUFSIZE]; int fd, retval; uint64_t page, physaddr; unsigned long virt_pfn; @@ -104,16 +105,20 @@ rte_mem_virt2phy(const void *virtaddr) fd = open("/proc/self/pagemap", O_RDONLY); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(INFO, "%s(): cannot open /proc/self/pagemap: %s", - __func__, strerror(errno)); + __func__, errmsg); return RTE_BAD_IOVA; } virt_pfn = (unsigned long)virtaddr / page_size; offset = sizeof(uint64_t) * virt_pfn; if (lseek(fd, offset, SEEK_SET) == (off_t) -1) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(INFO, "%s(): seek error in /proc/self/pagemap: %s", - __func__, strerror(errno)); + __func__, errmsg); close(fd); return RTE_BAD_IOVA; } @@ -121,8 +126,10 @@ rte_mem_virt2phy(const void *virtaddr) retval = read(fd, &page, PFN_MASK_SIZE); close(fd); if (retval < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(INFO, "%s(): cannot read /proc/self/pagemap: %s", - __func__, strerror(errno)); + __func__, errmsg); return RTE_BAD_IOVA; } else if (retval != PFN_MASK_SIZE) { EAL_LOG(INFO, "%s(): read %d bytes from /proc/self/pagemap " @@ -237,7 +244,11 @@ static int huge_wrap_sigsetjmp(void) /* Callback for numa library. */ void numa_error(char *where) { - EAL_LOG(ERR, "%s failed: %s", where, strerror(errno)); + char errmsg[RTE_STRERR_BUFSIZE]; + + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "%s failed: %s", where, errmsg); } #endif @@ -262,6 +273,7 @@ map_all_hugepages(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi, struct bitmask *oldmask = NULL; bool have_numa = true; unsigned long maxnode = 0; + char errmsg[RTE_STRERR_BUFSIZE]; const struct internal_config *internal_conf = eal_get_internal_configuration(); @@ -276,9 +288,11 @@ map_all_hugepages(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi, oldmask = numa_allocate_nodemask(); if (get_mempolicy(&oldpolicy, oldmask->maskp, oldmask->size + 1, 0, 0) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Failed to get current mempolicy: %s. " - "Assuming MPOL_DEFAULT.", strerror(errno)); + "Assuming MPOL_DEFAULT.", errmsg); oldpolicy = MPOL_DEFAULT; } for (i = 0; i < RTE_MAX_NUMA_NODES; i++) @@ -332,8 +346,9 @@ map_all_hugepages(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi, /* try to create hugepage file */ fd = open(hf->filepath, O_CREAT | O_RDWR, 0600); if (fd < 0) { - EAL_LOG(DEBUG, "%s(): open failed: %s", __func__, - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(DEBUG, "%s(): open failed: %s", __func__, errmsg); goto out; } @@ -345,8 +360,9 @@ map_all_hugepages(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi, virtaddr = mmap(NULL, hugepage_sz, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, fd, 0); if (virtaddr == MAP_FAILED) { - EAL_LOG(DEBUG, "%s(): mmap failed: %s", __func__, - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(DEBUG, "%s(): mmap failed: %s", __func__, errmsg); close(fd); goto out; } @@ -378,8 +394,10 @@ map_all_hugepages(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi, /* set shared lock on the file. */ if (flock(fd, LOCK_SH) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "%s(): Locking file failed:%s ", - __func__, strerror(errno)); + __func__, errmsg); close(fd); goto out; } @@ -396,8 +414,9 @@ map_all_hugepages(struct hugepage_file *hugepg_tbl, struct hugepage_info *hpi, numa_set_localalloc(); } else if (set_mempolicy(oldpolicy, oldmask->maskp, oldmask->size + 1) < 0) { - EAL_LOG(ERR, "Failed to restore mempolicy: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "Failed to restore mempolicy: %s", errmsg); numa_set_localalloc(); } } @@ -576,6 +595,7 @@ unlink_hugepage_files(struct hugepage_file *hugepg_tbl, { unsigned socket, size; int page, nrpages = 0; + char errmsg[RTE_STRERR_BUFSIZE]; const struct internal_config *internal_conf = eal_get_internal_configuration(); @@ -589,8 +609,10 @@ unlink_hugepage_files(struct hugepage_file *hugepg_tbl, struct hugepage_file *hp = &hugepg_tbl[page]; if (hp->orig_va != NULL && unlink(hp->filepath)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(WARNING, "%s(): Removing %s failed: %s", - __func__, hp->filepath, strerror(errno)); + __func__, hp->filepath, errmsg); } } return 0; @@ -607,6 +629,7 @@ unmap_unneeded_hugepages(struct hugepage_file *hugepg_tbl, { unsigned socket, size; int page, nrpages = 0; + char errmsg[RTE_STRERR_BUFSIZE]; const struct internal_config *internal_conf = eal_get_internal_configuration(); @@ -639,8 +662,12 @@ unmap_unneeded_hugepages(struct hugepage_file *hugepg_tbl, hp->orig_va = NULL; if (unlink(hp->filepath) == -1) { + if (strerror_r(errno, errmsg, + sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), + "Unknown error %d", errno); EAL_LOG(ERR, "%s(): Removing %s failed: %s", - __func__, hp->filepath, strerror(errno)); + __func__, hp->filepath, errmsg); return -1; } } else { @@ -660,6 +687,7 @@ static int remap_segment(struct hugepage_file *hugepages, int seg_start, int seg_end) { struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_memseg_list *msl; struct rte_fbarray *arr; int cur_page, seg_len; @@ -735,14 +763,18 @@ remap_segment(struct hugepage_file *hugepages, int seg_start, int seg_end) fd = open(hfile->filepath, O_RDWR); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Could not open '%s': %s", - hfile->filepath, strerror(errno)); + hfile->filepath, errmsg); return -1; } /* set shared lock on the file. */ if (flock(fd, LOCK_SH) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "Could not lock '%s': %s", - hfile->filepath, strerror(errno)); + hfile->filepath, errmsg); close(fd); return -1; } @@ -755,8 +787,10 @@ remap_segment(struct hugepage_file *hugepages, int seg_start, int seg_end) addr = mmap(addr, page_sz, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE | MAP_FIXED, fd, 0); if (addr == MAP_FAILED) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Couldn't remap '%s': %s", - hfile->filepath, strerror(errno)); + hfile->filepath, errmsg); close(fd); return -1; } @@ -1129,6 +1163,7 @@ eal_legacy_hugepage_init(void) eal_get_internal_configuration(); uint64_t memory[RTE_MAX_NUMA_NODES]; + char errmsg[RTE_STRERR_BUFSIZE]; unsigned hp_offset; int i, j; @@ -1177,14 +1212,16 @@ eal_legacy_hugepage_init(void) /* create a memfd and store it in the segment fd table */ memfd = memfd_create("nohuge", 0); if (memfd < 0) { - EAL_LOG(DEBUG, "Cannot create memfd: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(DEBUG, "Cannot create memfd: %s", errmsg); EAL_LOG(DEBUG, "Falling back to anonymous map"); } else { /* we got an fd - now resize it */ if (ftruncate(memfd, internal_conf->memory) < 0) { - EAL_LOG(ERR, "Cannot resize memfd: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "Cannot resize memfd: %s", errmsg); EAL_LOG(ERR, "Falling back to anonymous map"); close(memfd); } else { @@ -1211,8 +1248,9 @@ eal_legacy_hugepage_init(void) addr = mmap(prealloc_addr, mem_sz, PROT_READ | PROT_WRITE, flags | MAP_FIXED, fd, 0); if (addr == MAP_FAILED || addr != prealloc_addr) { - EAL_LOG(ERR, "%s: mmap() failed: %s", __func__, - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "%s: mmap() failed: %s", __func__, errmsg); munmap(prealloc_addr, mem_sz); return -1; } @@ -1520,6 +1558,7 @@ eal_legacy_hugepage_attach(void) { struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config; struct hugepage_file *hp = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; unsigned int num_hp = 0; unsigned int i = 0; unsigned int cur_seg; @@ -1570,23 +1609,29 @@ eal_legacy_hugepage_attach(void) fd = open(hf->filepath, O_RDWR); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Could not open %s: %s", - hf->filepath, strerror(errno)); + hf->filepath, errmsg); goto error; } map_addr = mmap(map_addr, map_sz, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, fd, 0); if (map_addr == MAP_FAILED) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Could not map %s: %s", - hf->filepath, strerror(errno)); + hf->filepath, errmsg); goto fd_error; } /* set shared lock on the file. */ if (flock(fd, LOCK_SH) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "%s(): Locking file failed: %s", - __func__, strerror(errno)); + __func__, errmsg); goto mmap_error; } @@ -1918,6 +1963,7 @@ memseg_secondary_init(void) int rte_eal_memseg_init(void) { + char errmsg[RTE_STRERR_BUFSIZE]; /* increase rlimit to maximum */ struct rlimit lim; @@ -1930,8 +1976,10 @@ rte_eal_memseg_init(void) lim.rlim_cur = lim.rlim_max; if (setrlimit(RLIMIT_NOFILE, &lim) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "Setting maximum number of open files failed: %s", - strerror(errno)); + errmsg); } else { EAL_LOG(DEBUG, "Setting maximum number of open files to %" PRIu64, diff --git a/lib/eal/linux/eal_timer.c b/lib/eal/linux/eal_timer.c index 489732c116..1ea4d82bb2 100644 --- a/lib/eal/linux/eal_timer.c +++ b/lib/eal/linux/eal_timer.c @@ -137,6 +137,7 @@ rte_eal_hpet_init(int make_default) int fd, ret; struct internal_config *internal_conf = eal_get_internal_configuration(); + char errmsg[RTE_STRERR_BUFSIZE]; if (internal_conf->no_hpet) { EAL_LOG(NOTICE, "HPET is disabled"); @@ -145,8 +146,9 @@ rte_eal_hpet_init(int make_default) fd = open(DEV_HPET, O_RDONLY); if (fd < 0) { - EAL_LOG(ERR, "ERROR: Cannot open "DEV_HPET": %s!", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "ERROR: Cannot open "DEV_HPET": %s!", errmsg); internal_conf->no_hpet = 1; return -1; } diff --git a/lib/eal/linux/eal_vfio.c b/lib/eal/linux/eal_vfio.c index 7132e24cba..ed8eba76eb 100644 --- a/lib/eal/linux/eal_vfio.c +++ b/lib/eal/linux/eal_vfio.c @@ -351,6 +351,7 @@ vfio_open_group_fd(int iommu_group_num) { int vfio_group_fd; char filename[PATH_MAX]; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_mp_msg mp_req, *mp_rep; struct rte_mp_reply mp_reply = {0}; struct timespec ts = {.tv_sec = 5, .tv_nsec = 0}; @@ -367,8 +368,9 @@ vfio_open_group_fd(int iommu_group_num) if (vfio_group_fd < 0) { /* if file not found, it's not an error */ if (errno != ENOENT) { - EAL_LOG(ERR, "Cannot open %s: %s", - filename, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "Cannot open %s: %s", filename, errmsg); return -1; } @@ -379,9 +381,12 @@ vfio_open_group_fd(int iommu_group_num) vfio_group_fd = open(filename, O_RDWR); if (vfio_group_fd < 0) { if (errno != ENOENT) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), + "Unknown error %d", errno); EAL_LOG(ERR, "Cannot open %s: %s", - filename, strerror(errno)); + filename, errmsg); return -1; } return -ENOENT; @@ -745,6 +750,7 @@ rte_vfio_setup_device(const char *sysfs_base, const char *dev_addr, }; struct vfio_config *vfio_cfg; struct user_mem_maps *user_mem_maps; + char errmsg[RTE_STRERR_BUFSIZE]; int vfio_container_fd; int vfio_group_fd; int iommu_group_num; @@ -790,8 +796,10 @@ rte_vfio_setup_device(const char *sysfs_base, const char *dev_addr, /* check if the group is viable */ ret = ioctl(vfio_group_fd, VFIO_GROUP_GET_STATUS, &group_status); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s cannot get VFIO group status, " - "error %i (%s)", dev_addr, errno, strerror(errno)); + "error %i (%s)", dev_addr, errno, errmsg); close(vfio_group_fd); rte_vfio_clear_group(vfio_group_fd); return -1; @@ -817,9 +825,11 @@ rte_vfio_setup_device(const char *sysfs_base, const char *dev_addr, ret = ioctl(vfio_group_fd, VFIO_GROUP_SET_CONTAINER, &vfio_container_fd); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s cannot add VFIO group to container, error " - "%i (%s)", dev_addr, errno, strerror(errno)); + "%i (%s)", dev_addr, errno, errmsg); close(vfio_group_fd); rte_vfio_clear_group(vfio_group_fd); return -1; @@ -857,10 +867,12 @@ rte_vfio_setup_device(const char *sysfs_base, const char *dev_addr, else ret = 0; if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s DMA remapping failed, error " "%i (%s)", - dev_addr, errno, strerror(errno)); + dev_addr, errno, errmsg); close(vfio_group_fd); rte_vfio_clear_group(vfio_group_fd); rte_mcfg_mem_read_unlock(); @@ -976,9 +988,10 @@ rte_vfio_setup_device(const char *sysfs_base, const char *dev_addr, dev_get_info: ret = ioctl(*vfio_dev_fd, VFIO_DEVICE_GET_INFO, device_info); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "%s cannot get device info, " - "error %i (%s)", dev_addr, errno, - strerror(errno)); + "error %i (%s)", dev_addr, errno, errmsg); close(*vfio_dev_fd); close(vfio_group_fd); rte_vfio_clear_group(vfio_group_fd); @@ -1205,6 +1218,7 @@ vfio_get_iommu_type(void) const struct vfio_iommu_type * vfio_set_iommu_type(int vfio_container_fd) { + char errmsg[RTE_STRERR_BUFSIZE]; unsigned idx; for (idx = 0; idx < RTE_DIM(iommu_types); idx++) { const struct vfio_iommu_type *t = &iommu_types[idx]; @@ -1216,10 +1230,11 @@ vfio_set_iommu_type(int vfio_container_fd) t->type_id, t->name); return t; } + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); /* not an error, there may be more supported IOMMU types */ EAL_LOG(DEBUG, "Set IOMMU type %d (%s) failed, error " - "%i (%s)", t->type_id, t->name, errno, - strerror(errno)); + "%i (%s)", t->type_id, t->name, errno, errmsg); } /* if we didn't find a suitable IOMMU type, fail */ return NULL; @@ -1229,6 +1244,7 @@ int rte_vfio_get_device_info(const char *sysfs_base, const char *dev_addr, int *vfio_dev_fd, struct vfio_device_info *device_info) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret; if (device_info == NULL || *vfio_dev_fd < 0) @@ -1241,9 +1257,11 @@ rte_vfio_get_device_info(const char *sysfs_base, const char *dev_addr, return -1; } else { ret = ioctl(*vfio_dev_fd, VFIO_DEVICE_GET_INFO, device_info); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); if (ret) { EAL_LOG(ERR, "%s cannot get device info, error %i (%s)", - dev_addr, errno, strerror(errno)); + dev_addr, errno, errmsg); return -1; } } @@ -1254,6 +1272,7 @@ rte_vfio_get_device_info(const char *sysfs_base, const char *dev_addr, int vfio_has_supported_extensions(int vfio_container_fd) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret; unsigned idx, n_extensions = 0; for (idx = 0; idx < RTE_DIM(iommu_types); idx++) { @@ -1262,8 +1281,10 @@ vfio_has_supported_extensions(int vfio_container_fd) ret = ioctl(vfio_container_fd, VFIO_CHECK_EXTENSION, t->type_id); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Could not get IOMMU type, error " - "%i (%s)", errno, strerror(errno)); + "%i (%s)", errno, errmsg); close(vfio_container_fd); return -1; } else if (ret == 1) { @@ -1288,6 +1309,7 @@ int rte_vfio_get_container_fd(void) { int ret, vfio_container_fd; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_mp_msg mp_req, *mp_rep; struct rte_mp_reply mp_reply = {0}; struct timespec ts = {.tv_sec = 5, .tv_nsec = 0}; @@ -1300,21 +1322,25 @@ rte_vfio_get_container_fd(void) if (internal_conf->process_type == RTE_PROC_PRIMARY) { vfio_container_fd = open(VFIO_CONTAINER_PATH, O_RDWR); if (vfio_container_fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot open VFIO container %s, error " "%i (%s)", VFIO_CONTAINER_PATH, - errno, strerror(errno)); + errno, errmsg); return -1; } /* check VFIO API version */ ret = ioctl(vfio_container_fd, VFIO_GET_API_VERSION); if (ret != VFIO_API_VERSION) { - if (ret < 0) + if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Could not get VFIO API version, error " - "%i (%s)", errno, strerror(errno)); - else + "%i (%s)", errno, errmsg); + } else EAL_LOG(ERR, "Unsupported VFIO API version!"); close(vfio_container_fd); return -1; @@ -1422,6 +1448,7 @@ vfio_type1_dma_mem_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova, { struct vfio_iommu_type1_dma_map dma_map; struct vfio_iommu_type1_dma_unmap dma_unmap; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; if (do_map != 0) { @@ -1443,9 +1470,11 @@ vfio_type1_dma_mem_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova, EAL_LOG(DEBUG, "Memory segment is already mapped, skipping"); } else { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot set up DMA remapping, error " - "%i (%s)", errno, strerror(errno)); + "%i (%s)", errno, errmsg); return -1; } } @@ -1458,8 +1487,10 @@ vfio_type1_dma_mem_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova, ret = ioctl(vfio_container_fd, VFIO_IOMMU_UNMAP_DMA, &dma_unmap); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot clear DMA remapping, error " - "%i (%s)", errno, strerror(errno)); + "%i (%s)", errno, errmsg); return -1; } else if (dma_unmap.size != len) { EAL_LOG(ERR, "Unexpected size %"PRIu64 @@ -1493,6 +1524,7 @@ vfio_spapr_dma_do_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova, .size = len, .flags = 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; if (do_map != 0) { @@ -1506,9 +1538,11 @@ vfio_spapr_dma_do_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova, ret = ioctl(vfio_container_fd, VFIO_IOMMU_SPAPR_REGISTER_MEMORY, ®); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot register vaddr for IOMMU, error " - "%i (%s)", errno, strerror(errno)); + "%i (%s)", errno, errmsg); return -1; } @@ -1522,8 +1556,10 @@ vfio_spapr_dma_do_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova, ret = ioctl(vfio_container_fd, VFIO_IOMMU_MAP_DMA, &dma_map); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot map vaddr for IOMMU, error " - "%i (%s)", errno, strerror(errno)); + "%i (%s)", errno, errmsg); return -1; } @@ -1538,17 +1574,21 @@ vfio_spapr_dma_do_map(int vfio_container_fd, uint64_t vaddr, uint64_t iova, ret = ioctl(vfio_container_fd, VFIO_IOMMU_UNMAP_DMA, &dma_unmap); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot unmap vaddr for IOMMU, error " - "%i (%s)", errno, strerror(errno)); + "%i (%s)", errno, errmsg); return -1; } ret = ioctl(vfio_container_fd, VFIO_IOMMU_SPAPR_UNREGISTER_MEMORY, ®); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot unregister vaddr for IOMMU, error " - "%i (%s)", errno, strerror(errno)); + "%i (%s)", errno, errmsg); return -1; } } @@ -1724,6 +1764,7 @@ vfio_spapr_create_dma_window(int vfio_container_fd) .argsz = sizeof(remove), }; struct vfio_iommu_spapr_tce_info info = { .argsz = sizeof(info), }; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; ret = spapr_dma_win_size(); @@ -1732,8 +1773,10 @@ vfio_spapr_create_dma_window(int vfio_container_fd) ret = ioctl(vfio_container_fd, VFIO_IOMMU_SPAPR_TCE_GET_INFO, &info); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot get IOMMU info, error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -1; } @@ -1773,8 +1816,10 @@ vfio_spapr_create_dma_window(int vfio_container_fd) } #endif /* VFIO_IOMMU_SPAPR_INFO_DDW */ if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot create new DMA window, error " - "%i (%s)", errno, strerror(errno)); + "%i (%s)", errno, errmsg); EAL_LOG(ERR, "Consider using a larger hugepage size if supported by the system"); return -1; @@ -2027,6 +2072,7 @@ container_dma_unmap(struct vfio_config *vfio_cfg, uint64_t vaddr, uint64_t iova, int rte_vfio_noiommu_is_enabled(void) { + char errmsg[RTE_STRERR_BUFSIZE]; int fd; ssize_t cnt; char c; @@ -2034,8 +2080,10 @@ rte_vfio_noiommu_is_enabled(void) fd = open(VFIO_NOIOMMU_MODE, O_RDONLY); if (fd < 0) { if (errno != ENOENT) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Cannot open VFIO noiommu file " - "%i (%s)", errno, strerror(errno)); + "%i (%s)", errno, errmsg); return -1; } /* @@ -2048,8 +2096,10 @@ rte_vfio_noiommu_is_enabled(void) cnt = read(fd, &c, 1); close(fd); if (cnt != 1) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(ERR, "Unable to read from VFIO noiommu file " - "%i (%s)", errno, strerror(errno)); + "%i (%s)", errno, errmsg); return -1; } diff --git a/lib/eal/unix/eal_filesystem.c b/lib/eal/unix/eal_filesystem.c index 6cd5f1492c..d87924fe79 100644 --- a/lib/eal/unix/eal_filesystem.c +++ b/lib/eal/unix/eal_filesystem.c @@ -13,12 +13,14 @@ #include #include +#include #include "eal_private.h" #include "eal_filesystem.h" int eal_create_runtime_dir(void) { + char errmsg[RTE_STRERR_BUFSIZE]; const char *directory; char run_dir[PATH_MAX]; char tmp[PATH_MAX]; @@ -58,15 +60,17 @@ int eal_create_runtime_dir(void) */ ret = mkdir(tmp, 0700); if (ret < 0 && errno != EEXIST) { - EAL_LOG(ERR, "Error creating '%s': %s", - tmp, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "Error creating '%s': %s", tmp, errmsg); return -1; } ret = mkdir(run_dir, 0700); if (ret < 0 && errno != EEXIST) { - EAL_LOG(ERR, "Error creating '%s': %s", - run_dir, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(ERR, "Error creating '%s': %s", run_dir, errmsg); return -1; } diff --git a/lib/eal/unix/eal_unix_memory.c b/lib/eal/unix/eal_unix_memory.c index 4fd066a290..6bcbfe3091 100644 --- a/lib/eal/unix/eal_unix_memory.c +++ b/lib/eal/unix/eal_unix_memory.c @@ -27,12 +27,15 @@ static void * mem_map(void *requested_addr, size_t size, int prot, int flags, int fd, uint64_t offset) { + char errmsg[RTE_STRERR_BUFSIZE]; + void *virt = mmap(requested_addr, size, prot, flags, fd, offset); if (virt == MAP_FAILED) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "Cannot mmap(%p, 0x%zx, 0x%x, 0x%x, %d, 0x%"PRIx64"): %s", - requested_addr, size, prot, flags, fd, offset, - strerror(errno)); + requested_addr, size, prot, flags, fd, offset, errmsg); rte_errno = errno; return NULL; } @@ -42,10 +45,14 @@ mem_map(void *requested_addr, size_t size, int prot, int flags, static int mem_unmap(void *virt, size_t size) { + char errmsg[RTE_STRERR_BUFSIZE]; + int ret = munmap(virt, size); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "Cannot munmap(%p, 0x%zx): %s", - virt, size, strerror(errno)); + virt, size, errmsg); rte_errno = errno; } return ret; @@ -80,11 +87,15 @@ eal_mem_free(void *virt, size_t size) int eal_mem_set_dump(void *virt, size_t size, bool dump) { + char errmsg[RTE_STRERR_BUFSIZE]; + int flags = dump ? EAL_DODUMP : EAL_DONTDUMP; int ret = madvise(virt, size, flags); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); EAL_LOG(DEBUG, "madvise(%p, %#zx, %d) failed: %s", - virt, size, flags, strerror(errno)); + virt, size, flags, errmsg); rte_errno = errno; } return ret; diff --git a/lib/eal/unix/rte_thread.c b/lib/eal/unix/rte_thread.c index 1b4c73f58e..c24fae8ea5 100644 --- a/lib/eal/unix/rte_thread.c +++ b/lib/eal/unix/rte_thread.c @@ -293,6 +293,7 @@ rte_thread_set_priority(rte_thread_t thread_id, int rte_thread_key_create(rte_thread_key *key, void (*destructor)(void *)) { + char errmsg[RTE_STRERR_BUFSIZE]; int err; *key = malloc(sizeof(**key)); @@ -303,8 +304,9 @@ rte_thread_key_create(rte_thread_key *key, void (*destructor)(void *)) } err = pthread_key_create(&((*key)->thread_index), destructor); if (err) { - EAL_LOG(DEBUG, "pthread_key_create failed: %s", - strerror(err)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(DEBUG, "pthread_key_create failed: %s", errmsg); free(*key); rte_errno = ENOEXEC; return -1; @@ -315,6 +317,7 @@ rte_thread_key_create(rte_thread_key *key, void (*destructor)(void *)) int rte_thread_key_delete(rte_thread_key key) { + char errmsg[RTE_STRERR_BUFSIZE]; int err; if (!key) { @@ -324,8 +327,9 @@ rte_thread_key_delete(rte_thread_key key) } err = pthread_key_delete(key->thread_index); if (err) { - EAL_LOG(DEBUG, "pthread_key_delete failed: %s", - strerror(err)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(DEBUG, "pthread_key_delete failed: %s", errmsg); free(key); rte_errno = ENOEXEC; return -1; @@ -337,6 +341,7 @@ rte_thread_key_delete(rte_thread_key key) int rte_thread_value_set(rte_thread_key key, const void *value) { + char errmsg[RTE_STRERR_BUFSIZE]; int err; if (!key) { @@ -346,8 +351,9 @@ rte_thread_value_set(rte_thread_key key, const void *value) } err = pthread_setspecific(key->thread_index, value); if (err) { - EAL_LOG(DEBUG, "pthread_setspecific failed: %s", - strerror(err)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + EAL_LOG(DEBUG, "pthread_setspecific failed: %s", errmsg); rte_errno = ENOEXEC; return -1; } From patchwork Mon Nov 4 11:09:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147911 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 7B16645C76; Mon, 4 Nov 2024 12:11:12 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C59ED40E39; Mon, 4 Nov 2024 12:10:47 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id C21F4402AF for ; Mon, 4 Nov 2024 12:10:41 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.105]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4XhpcX34M7zpXqv; Mon, 4 Nov 2024 19:08:44 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id F0DE8140361; Mon, 4 Nov 2024 19:10:38 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:38 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 04/52] eventdev: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:09:49 +0800 Message-ID: <20241104111037.3632161-5-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- lib/eventdev/rte_event_eth_rx_adapter.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c index 3ee20d95f3..01fa862334 100644 --- a/lib/eventdev/rte_event_eth_rx_adapter.c +++ b/lib/eventdev/rte_event_eth_rx_adapter.c @@ -1082,6 +1082,7 @@ rxa_intr_ring_enqueue(struct event_eth_rx_adapter *rx_adapter, void *data) union queue_data qd; struct eth_device_info *dev_info; struct eth_rx_queue_info *queue_info; + char errmsg[RTE_STRERR_BUFSIZE]; int *intr_enabled; qd.ptr = data; @@ -1104,9 +1105,12 @@ rxa_intr_ring_enqueue(struct event_eth_rx_adapter *rx_adapter, void *data) * vectors supported (an interrupt vector is shared in * case of shared interrupts) */ - if (err) + if (err) { + if (strerror_r(-err, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -err); RTE_EDEV_LOG_ERR("Failed to enqueue interrupt" - " to ring: %s", strerror(-err)); + " to ring: %s", errmsg); + } else rte_eth_dev_rx_intr_disable(port_id, queue); } From patchwork Mon Nov 4 11:09:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147943 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 4661A45C76; Mon, 4 Nov 2024 12:14:47 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EDF3D415D7; Mon, 4 Nov 2024 12:11:27 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 259F640A72 for ; Mon, 4 Nov 2024 12:10:41 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.174]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4Xhpck4KcYzyVPk; Mon, 4 Nov 2024 19:08:54 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 29A22140137; Mon, 4 Nov 2024 19:10:39 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:38 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 05/52] latency: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:09:50 +0800 Message-ID: <20241104111037.3632161-6-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- lib/latencystats/rte_latencystats.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/latencystats/rte_latencystats.c b/lib/latencystats/rte_latencystats.c index 6a261309f9..8957f6f6ac 100644 --- a/lib/latencystats/rte_latencystats.c +++ b/lib/latencystats/rte_latencystats.c @@ -220,6 +220,7 @@ rte_latencystats_init(uint64_t app_samp_intvl, struct rxtx_cbs *cbs = NULL; const char *ptr_strings[NUM_LATENCY_STATS] = {0}; const struct rte_memzone *mz = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; const unsigned int flags = 0; int ret; @@ -266,9 +267,11 @@ rte_latencystats_init(uint64_t app_samp_intvl, ret = rte_eth_dev_info_get(pid, &dev_info); if (ret != 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); LATENCY_STATS_LOG(INFO, "Error during getting device (port %u) info: %s", - pid, strerror(-ret)); + pid, errmsg); continue; } @@ -303,6 +306,7 @@ rte_latencystats_uninit(void) int ret = 0; struct rxtx_cbs *cbs = NULL; const struct rte_memzone *mz = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; /** De register Rx/Tx callbacks */ RTE_ETH_FOREACH_DEV(pid) { @@ -310,9 +314,11 @@ rte_latencystats_uninit(void) ret = rte_eth_dev_info_get(pid, &dev_info); if (ret != 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); LATENCY_STATS_LOG(INFO, "Error during getting device (port %u) info: %s", - pid, strerror(-ret)); + pid, errmsg); continue; } From patchwork Mon Nov 4 11:09:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147928 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 B9BA345C76; Mon, 4 Nov 2024 12:13:12 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 199D341104; Mon, 4 Nov 2024 12:11:09 +0100 (CET) Received: from szxga07-in.huawei.com (szxga07-in.huawei.com [45.249.212.35]) by mails.dpdk.org (Postfix) with ESMTP id AAC344021F for ; Mon, 4 Nov 2024 12:10:40 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.163]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcr1Tjfz1SDxX; Mon, 4 Nov 2024 19:09:00 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 52628180019; Mon, 4 Nov 2024 19:10:39 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:39 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 06/52] node: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:09:51 +0800 Message-ID: <20241104111037.3632161-7-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- lib/node/kernel_tx.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/node/kernel_tx.c b/lib/node/kernel_tx.c index 3a96741622..3a76522799 100644 --- a/lib/node/kernel_tx.c +++ b/lib/node/kernel_tx.c @@ -20,6 +20,7 @@ static __rte_always_inline void kernel_tx_process_mbuf(struct rte_node *node, struct rte_mbuf **mbufs, uint16_t cnt) { kernel_tx_node_ctx_t *ctx = (kernel_tx_node_ctx_t *)node->ctx; + char errmsg[RTE_STRERR_BUFSIZE]; struct sockaddr_in sin = {0}; struct rte_ipv4_hdr *ip4; size_t len; @@ -35,8 +36,11 @@ kernel_tx_process_mbuf(struct rte_node *node, struct rte_mbuf **mbufs, uint16_t sin.sin_port = 0; sin.sin_addr.s_addr = ip4->dst_addr; - if (sendto(ctx->sock, buf, len, 0, (struct sockaddr *)&sin, sizeof(sin)) < 0) - node_err("kernel_tx", "Unable to send packets: %s", strerror(errno)); + if (sendto(ctx->sock, buf, len, 0, (struct sockaddr *)&sin, sizeof(sin)) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + node_err("kernel_tx", "Unable to send packets: %s", errmsg); + } } } From patchwork Mon Nov 4 11:09:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147909 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 C509945C76; Mon, 4 Nov 2024 12:10:59 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1C04640E24; Mon, 4 Nov 2024 12:10:45 +0100 (CET) Received: from szxga07-in.huawei.com (szxga07-in.huawei.com [45.249.212.35]) by mails.dpdk.org (Postfix) with ESMTP id DD6A8402AF for ; Mon, 4 Nov 2024 12:10:40 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcr2hGBz1SDPV; Mon, 4 Nov 2024 19:09:00 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 7C7251A0190; Mon, 4 Nov 2024 19:10:39 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:39 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 07/52] pdump: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:09:52 +0800 Message-ID: <20241104111037.3632161-8-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- lib/pdump/rte_pdump.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/pdump/rte_pdump.c b/lib/pdump/rte_pdump.c index 679c3dd0b5..83cb8b75d8 100644 --- a/lib/pdump/rte_pdump.c +++ b/lib/pdump/rte_pdump.c @@ -284,6 +284,7 @@ static int set_pdump_rxtx_cbs(const struct pdump_request *p) { uint16_t nb_rx_q = 0, nb_tx_q = 0, end_q, queue; + char errmsg[RTE_STRERR_BUFSIZE]; uint16_t port; int ret = 0; struct rte_bpf *filter = NULL; @@ -335,9 +336,11 @@ set_pdump_rxtx_cbs(const struct pdump_request *p) ret = rte_eth_dev_info_get(port, &dev_info); if (ret != 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); PDUMP_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-ret)); + port, errmsg); return ret; } @@ -731,15 +734,18 @@ int rte_pdump_stats(uint16_t port, struct rte_pdump_stats *stats) { struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; const struct rte_memzone *mz; int ret; memset(stats, 0, sizeof(*stats)); ret = rte_eth_dev_info_get(port, &dev_info); if (ret != 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); PDUMP_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-ret)); + port, errmsg); return ret; } From patchwork Mon Nov 4 11:09:53 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147914 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 2C2A245C76; Mon, 4 Nov 2024 12:11:33 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8C25840E4F; Mon, 4 Nov 2024 12:10:51 +0100 (CET) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) by mails.dpdk.org (Postfix) with ESMTP id 4A56D40A79 for ; Mon, 4 Nov 2024 12:10:41 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.44]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcs2GBcz1jwXm; Mon, 4 Nov 2024 19:09:01 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id A6A0D1400D2; Mon, 4 Nov 2024 19:10:39 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:39 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 08/52] pdump: use rte strerror Date: Mon, 4 Nov 2024 19:09:53 +0800 Message-ID: <20241104111037.3632161-9-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The rte_errno may be an RTE-specific error code, use rte_strerror() instead of strerror(). Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- lib/pdump/rte_pdump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pdump/rte_pdump.c b/lib/pdump/rte_pdump.c index 83cb8b75d8..49d8b712a8 100644 --- a/lib/pdump/rte_pdump.c +++ b/lib/pdump/rte_pdump.c @@ -410,7 +410,7 @@ pdump_server(const struct rte_mp_msg *mp_msg, const void *peer) mp_resp.num_fds = 0; if (rte_mp_reply(&mp_resp, peer) < 0) { PDUMP_LOG_LINE(ERR, "failed to send to client:%s", - strerror(rte_errno)); + rte_strerror(rte_errno)); return -1; } From patchwork Mon Nov 4 11:09:54 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147915 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 39CA545C76; Mon, 4 Nov 2024 12:11:42 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5CDB040E68; Mon, 4 Nov 2024 12:10:53 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id 42ECB40E28 for ; Mon, 4 Nov 2024 12:10:42 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcs2HMwz2Fbnf; Mon, 4 Nov 2024 19:09:01 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id D43651A0171; Mon, 4 Nov 2024 19:10:39 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:39 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 09/52] power: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:09:54 +0800 Message-ID: <20241104111037.3632161-10-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- lib/power/guest_channel.c | 15 ++++++++++++--- lib/power/power_kvm_vm.c | 6 +++++- lib/power/power_pstate_cpufreq.c | 14 +++++++++++--- lib/power/rte_power_pmd_mgmt.c | 6 ++++-- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/lib/power/guest_channel.c b/lib/power/guest_channel.c index bc3f55b6bf..33e6ea612e 100644 --- a/lib/power/guest_channel.c +++ b/lib/power/guest_channel.c @@ -14,6 +14,7 @@ #include #include +#include #include "guest_channel.h" @@ -57,6 +58,7 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id) { int flags, ret; struct rte_power_channel_packet pkt; + char errmsg[RTE_STRERR_BUFSIZE]; char fd_path[PATH_MAX]; int fd = -1; @@ -77,8 +79,10 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id) fd_path, lcore_id); fd = open(fd_path, O_RDWR); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); GUEST_CHANNEL_LOG(ERR, "Unable to connect to '%s' with error " - "%s", fd_path, strerror(errno)); + "%s", fd_path, errmsg); return -1; } @@ -105,9 +109,11 @@ guest_channel_host_connect(const char *path, unsigned int lcore_id) global_fds[lcore_id] = fd; ret = guest_channel_send_msg(&pkt, lcore_id); if (ret != 0) { + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); GUEST_CHANNEL_LOG(ERR, "Error on channel '%s' communications test: %s", - fd_path, ret > 0 ? strerror(ret) : + fd_path, ret > 0 ? errmsg : "channel not connected"); goto error; } @@ -161,6 +167,7 @@ int power_guest_channel_read_msg(void *pkt, size_t pkt_len, unsigned int lcore_id) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret; struct pollfd fds; @@ -186,8 +193,10 @@ int power_guest_channel_read_msg(void *pkt, GUEST_CHANNEL_LOG(DEBUG, "Timeout occurred during poll function."); return -1; } else if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); GUEST_CHANNEL_LOG(ERR, "Error occurred during poll function: %s", - strerror(errno)); + errmsg); return -1; } diff --git a/lib/power/power_kvm_vm.c b/lib/power/power_kvm_vm.c index f15be8fac5..c1e6b3cec4 100644 --- a/lib/power/power_kvm_vm.c +++ b/lib/power/power_kvm_vm.c @@ -5,6 +5,7 @@ #include #include +#include #include "rte_power_guest_channel.h" #include "guest_channel.h" @@ -71,6 +72,7 @@ power_kvm_vm_set_freq(__rte_unused unsigned int lcore_id, static inline int send_msg(unsigned int lcore_id, uint32_t scale_direction) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret; if (lcore_id >= RTE_MAX_LCORE) { @@ -82,8 +84,10 @@ send_msg(unsigned int lcore_id, uint32_t scale_direction) ret = guest_channel_send_msg(&pkt[lcore_id], lcore_id); if (ret == 0) return 1; + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); POWER_LOG(DEBUG, "Error sending message: %s", - ret > 0 ? strerror(ret) : "channel not connected"); + ret > 0 ? errmsg : "channel not connected"); return -1; } diff --git a/lib/power/power_pstate_cpufreq.c b/lib/power/power_pstate_cpufreq.c index 4755909466..5538f3209b 100644 --- a/lib/power/power_pstate_cpufreq.c +++ b/lib/power/power_pstate_cpufreq.c @@ -13,6 +13,7 @@ #include #include +#include #include "rte_power_pmd_mgmt.h" #include "power_pstate_cpufreq.h" @@ -75,6 +76,7 @@ static struct pstate_power_info lcore_power_info[RTE_MAX_LCORE]; static int32_t power_read_turbo_pct(uint64_t *outVal) { + char errmsg[RTE_STRERR_BUFSIZE]; int fd, ret; char val[4] = {0}; char *endptr; @@ -82,24 +84,30 @@ power_read_turbo_pct(uint64_t *outVal) fd = open(POWER_SYSFILE_TURBO_PCT, O_RDONLY); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); POWER_LOG(ERR, "Error opening '%s': %s", POWER_SYSFILE_TURBO_PCT, - strerror(errno)); + errmsg); return fd; } ret = read(fd, val, sizeof(val)); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); POWER_LOG(ERR, "Error reading '%s': %s", POWER_SYSFILE_TURBO_PCT, - strerror(errno)); + errmsg); goto out; } errno = 0; *outVal = (uint64_t) strtol(val, &endptr, 10); if (errno != 0 || (*endptr != 0 && *endptr != '\n')) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); POWER_LOG(ERR, "Error converting str to digits, read from %s: %s", - POWER_SYSFILE_TURBO_PCT, strerror(errno)); + POWER_SYSFILE_TURBO_PCT, errmsg); ret = -1; goto out; } diff --git a/lib/power/rte_power_pmd_mgmt.c b/lib/power/rte_power_pmd_mgmt.c index 5e50613f5b..308129cad0 100644 --- a/lib/power/rte_power_pmd_mgmt.c +++ b/lib/power/rte_power_pmd_mgmt.c @@ -487,6 +487,7 @@ rte_power_ethdev_pmgmt_queue_enable(unsigned int lcore_id, uint16_t port_id, uint16_t queue_id, enum rte_power_pmd_mgmt_type mode) { const union queue qdata = {.portid = port_id, .qid = queue_id}; + char errmsg[RTE_STRERR_BUFSIZE]; struct pmd_core_cfg *lcore_cfg; struct queue_list_entry *queue_cfg; struct rte_eth_dev_info info; @@ -574,8 +575,9 @@ rte_power_ethdev_pmgmt_queue_enable(unsigned int lcore_id, uint16_t port_id, /* add this queue to the list */ ret = queue_list_add(lcore_cfg, &qdata); if (ret < 0) { - POWER_LOG(DEBUG, "Failed to add queue to list: %s", - strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + POWER_LOG(DEBUG, "Failed to add queue to list: %s", errmsg); goto end; } /* new queue is always added last */ From patchwork Mon Nov 4 11:09:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147912 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 EF6A645C76; Mon, 4 Nov 2024 12:11:18 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2F40D40E38; Mon, 4 Nov 2024 12:10:49 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 4F9BB40E15 for ; Mon, 4 Nov 2024 12:10:41 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.105]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4Xhpc62n00z10PY2; Mon, 4 Nov 2024 19:08:22 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 0D9621402C8; Mon, 4 Nov 2024 19:10:40 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:39 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 10/52] vhost: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:09:55 +0800 Message-ID: <20241104111037.3632161-11-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- lib/vhost/fd_man.c | 14 ++++-- lib/vhost/socket.c | 34 ++++++++++--- lib/vhost/vduse.c | 105 +++++++++++++++++++++++++++++++---------- lib/vhost/vhost_user.c | 25 +++++++--- 4 files changed, 138 insertions(+), 40 deletions(-) diff --git a/lib/vhost/fd_man.c b/lib/vhost/fd_man.c index 9bc7e50b93..db913f8c1c 100644 --- a/lib/vhost/fd_man.c +++ b/lib/vhost/fd_man.c @@ -13,6 +13,7 @@ #include #include #include +#include #include "fd_man.h" @@ -212,6 +213,7 @@ fdset_find_entry_locked(struct fdset *pfdset, int fd) int fdset_add(struct fdset *pfdset, int fd, fd_cb rcb, fd_cb wcb, void *dat) { + char errmsg[RTE_STRERR_BUFSIZE]; struct epoll_event ev; struct fdentry *pfdentry; int ret = 0; @@ -237,8 +239,10 @@ fdset_add(struct fdset *pfdset, int fd, fd_cb rcb, fd_cb wcb, void *dat) ret = epoll_ctl(pfdset->epfd, EPOLL_CTL_ADD, fd, &ev); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_FDMAN_LOG(ERR, "could not add %d fd to %d epfd: %s", - fd, pfdset->epfd, strerror(errno)); + fd, pfdset->epfd, errmsg); goto out_remove; } @@ -256,13 +260,17 @@ fdset_add(struct fdset *pfdset, int fd, fd_cb rcb, fd_cb wcb, void *dat) static void fdset_del_locked(struct fdset *pfdset, struct fdentry *pfdentry) { + char errmsg[RTE_STRERR_BUFSIZE]; + if (epoll_ctl(pfdset->epfd, EPOLL_CTL_DEL, pfdentry->fd, NULL) == -1) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); if (errno == EBADF) /* File might have already been closed. */ VHOST_FDMAN_LOG(DEBUG, "could not remove %d fd from %d epfd: %s", - pfdentry->fd, pfdset->epfd, strerror(errno)); + pfdentry->fd, pfdset->epfd, errmsg); else VHOST_FDMAN_LOG(ERR, "could not remove %d fd from %d epfd: %s", - pfdentry->fd, pfdset->epfd, strerror(errno)); + pfdentry->fd, pfdset->epfd, errmsg); } fdset_remove_entry(pfdset, pfdentry); diff --git a/lib/vhost/socket.c b/lib/vhost/socket.c index d29d15494c..96a9b84194 100644 --- a/lib/vhost/socket.c +++ b/lib/vhost/socket.c @@ -16,6 +16,7 @@ #include #include +#include #include "fd_man.h" #include "vduse.h" @@ -105,6 +106,7 @@ read_fd_message(char *ifname, int sockfd, char *buf, int buflen, int *fds, int m struct iovec iov; struct msghdr msgh; char control[CMSG_SPACE(max_fds * sizeof(int))]; + char errmsg[RTE_STRERR_BUFSIZE]; struct cmsghdr *cmsg; int got_fds = 0; int ret; @@ -122,9 +124,12 @@ read_fd_message(char *ifname, int sockfd, char *buf, int buflen, int *fds, int m ret = recvmsg(sockfd, &msgh, 0); if (ret <= 0) { - if (ret) + if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(ifname, ERR, "recvmsg failed on fd %d (%s)", - sockfd, strerror(errno)); + sockfd, errmsg); + } return ret; } @@ -161,6 +166,7 @@ send_fd_message(char *ifname, int sockfd, char *buf, int buflen, int *fds, int f struct msghdr msgh; size_t fdsize = fd_num * sizeof(int); char control[CMSG_SPACE(fdsize)]; + char errmsg[RTE_STRERR_BUFSIZE]; struct cmsghdr *cmsg; int ret; @@ -194,8 +200,10 @@ send_fd_message(char *ifname, int sockfd, char *buf, int buflen, int *fds, int f } while (ret < 0 && errno == EINTR); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(ifname, ERR, "sendmsg error on fd %d (%s)", - sockfd, strerror(errno)); + sockfd, errmsg); return ret; } @@ -341,6 +349,7 @@ static int create_unix_socket(struct vhost_user_socket *vsocket) { int fd; + char errmsg[RTE_STRERR_BUFSIZE]; struct sockaddr_un *un = &vsocket->un; fd = socket(AF_UNIX, SOCK_STREAM, 0); @@ -350,9 +359,11 @@ create_unix_socket(struct vhost_user_socket *vsocket) vsocket->is_server ? "server" : "client", fd); if (!vsocket->is_server && fcntl(fd, F_SETFL, O_NONBLOCK)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(vsocket->path, ERR, "vhost-user: can't set nonblocking mode for socket, fd: %d (%s)", - fd, strerror(errno)); + fd, errmsg); close(fd); return -1; } @@ -371,6 +382,7 @@ vhost_user_start_server(struct vhost_user_socket *vsocket) { int ret; int fd = vsocket->socket_fd; + char errmsg[RTE_STRERR_BUFSIZE]; const char *path = vsocket->path; /* @@ -385,8 +397,10 @@ vhost_user_start_server(struct vhost_user_socket *vsocket) */ ret = bind(fd, (struct sockaddr *)&vsocket->un, sizeof(vsocket->un)); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(path, ERR, "failed to bind: %s; remove it and try again", - strerror(errno)); + errmsg); goto err; } VHOST_CONFIG_LOG(path, INFO, "binding succeeded"); @@ -430,6 +444,7 @@ static rte_thread_t reconn_tid; static int vhost_user_connect_nonblock(char *path, int fd, struct sockaddr *un, size_t sz) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret, flags; ret = connect(fd, un, sz); @@ -438,8 +453,10 @@ vhost_user_connect_nonblock(char *path, int fd, struct sockaddr *un, size_t sz) flags = fcntl(fd, F_GETFL, 0); if (flags < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(path, ERR, "can't get flags for connfd %d (%s)", - fd, strerror(errno)); + fd, errmsg); return -2; } if ((flags & O_NONBLOCK) && fcntl(fd, F_SETFL, flags & ~O_NONBLOCK)) { @@ -523,6 +540,7 @@ vhost_user_start_client(struct vhost_user_socket *vsocket) { int ret; int fd = vsocket->socket_fd; + char errmsg[RTE_STRERR_BUFSIZE]; const char *path = vsocket->path; struct vhost_user_reconnect *reconn; @@ -534,7 +552,9 @@ vhost_user_start_client(struct vhost_user_socket *vsocket) return 0; } - VHOST_CONFIG_LOG(path, WARNING, "failed to connect: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + VHOST_CONFIG_LOG(path, WARNING, "failed to connect: %s", errmsg); if (ret == -2 || !vsocket->reconnect) { close(fd); diff --git a/lib/vhost/vduse.c b/lib/vhost/vduse.c index eaf3146b95..58bf065e66 100644 --- a/lib/vhost/vduse.c +++ b/lib/vhost/vduse.c @@ -17,6 +17,7 @@ #include #include +#include #include "fd_man.h" #include "iotlb.h" @@ -119,14 +120,17 @@ static struct vhost_backend_ops vduse_backend_ops = { static void vduse_control_queue_event(int fd, void *arg, int *remove __rte_unused) { + char errmsg[RTE_STRERR_BUFSIZE]; struct virtio_net *dev = arg; uint64_t buf; int ret; ret = read(fd, &buf, sizeof(buf)); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to read control queue event: %s", - strerror(errno)); + errmsg); return; } @@ -142,13 +146,16 @@ vduse_vring_setup(struct virtio_net *dev, unsigned int index, bool reconnect) struct vhost_vring_addr *ra = &vq->ring_addrs; struct vduse_vq_info vq_info; struct vduse_vq_eventfd vq_efd; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; vq_info.index = index; ret = ioctl(dev->vduse_dev_fd, VDUSE_VQ_GET_INFO, &vq_info); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to get VQ %u info: %s", - index, strerror(errno)); + index, errmsg); return; } @@ -178,8 +185,10 @@ vduse_vring_setup(struct virtio_net *dev, unsigned int index, bool reconnect) VHOST_CONFIG_LOG(dev->ifname, INFO, "\tready: %u", vq_info.ready); vq->kickfd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); if (vq->kickfd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to init kickfd for VQ %u: %s", - index, strerror(errno)); + index, errmsg); vq->kickfd = VIRTIO_INVALID_EVENTFD; return; } @@ -210,8 +219,10 @@ vduse_vring_setup(struct virtio_net *dev, unsigned int index, bool reconnect) ret = ioctl(dev->vduse_dev_fd, VDUSE_VQ_SETUP_KICKFD, &vq_efd); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to setup kickfd for VQ %u: %s", - index, strerror(errno)); + index, errmsg); close(vq->kickfd); vq->kickfd = VIRTIO_UNINITIALIZED_EVENTFD; return; @@ -220,9 +231,11 @@ vduse_vring_setup(struct virtio_net *dev, unsigned int index, bool reconnect) if (vq == dev->cvq) { ret = fdset_add(vduse.fdset, vq->kickfd, vduse_control_queue_event, NULL, dev); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to setup kickfd handler for VQ %u: %s", - index, strerror(errno)); + index, errmsg); vq_efd.fd = VDUSE_EVENTFD_DEASSIGN; ioctl(dev->vduse_dev_fd, VDUSE_VQ_SETUP_KICKFD, &vq_efd); close(vq->kickfd); @@ -237,6 +250,7 @@ static void vduse_vring_cleanup(struct virtio_net *dev, unsigned int index) { struct vhost_virtqueue *vq = dev->virtqueue[index]; + char errmsg[RTE_STRERR_BUFSIZE]; struct vduse_vq_eventfd vq_efd; int ret; @@ -247,9 +261,12 @@ vduse_vring_cleanup(struct virtio_net *dev, unsigned int index) vq_efd.fd = VDUSE_EVENTFD_DEASSIGN; ret = ioctl(dev->vduse_dev_fd, VDUSE_VQ_SETUP_KICKFD, &vq_efd); - if (ret) + if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to cleanup kickfd for VQ %u: %s", - index, strerror(errno)); + index, errmsg); + } close(vq->kickfd); vq->kickfd = VIRTIO_UNINITIALIZED_EVENTFD; @@ -274,6 +291,7 @@ vduse_vring_cleanup(struct virtio_net *dev, unsigned int index) static void vduse_device_start(struct virtio_net *dev, bool reconnect) { + char errmsg[RTE_STRERR_BUFSIZE]; unsigned int i, ret; VHOST_CONFIG_LOG(dev->ifname, INFO, "Starting device..."); @@ -287,8 +305,10 @@ vduse_device_start(struct virtio_net *dev, bool reconnect) ret = ioctl(dev->vduse_dev_fd, VDUSE_DEV_GET_FEATURES, &dev->features); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to get features: %s", - strerror(errno)); + errmsg); return; } @@ -357,14 +377,17 @@ vduse_events_handler(int fd, void *arg, int *remove __rte_unused) struct vduse_dev_response resp; struct vhost_virtqueue *vq; uint8_t old_status = dev->status; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; memset(&resp, 0, sizeof(resp)); ret = read(fd, &req, sizeof(req)); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to read request: %s", - strerror(errno)); + errmsg); return; } else if (ret < (int)sizeof(req)) { VHOST_CONFIG_LOG(dev->ifname, ERR, "Incomplete to read request %d", ret); @@ -406,8 +429,10 @@ vduse_events_handler(int fd, void *arg, int *remove __rte_unused) ret = write(dev->vduse_dev_fd, &resp, sizeof(resp)); if (ret != sizeof(resp)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to write response %s", - strerror(errno)); + errmsg); return; } @@ -428,6 +453,7 @@ static bool vduse_reconnect_path_set; static int vduse_reconnect_path_init(void) { + char errmsg[RTE_STRERR_BUFSIZE]; const char *directory; int ret; @@ -457,8 +483,10 @@ vduse_reconnect_path_init(void) ret = mkdir(vduse_reconnect_dir, 0700); if (ret < 0 && errno != EEXIST) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG("vduse", ERR, "Error creating '%s': %s", - vduse_reconnect_dir, strerror(errno)); + vduse_reconnect_dir, errmsg); return -1; } @@ -473,6 +501,7 @@ vduse_reconnect_path_init(void) static int vduse_reconnect_log_map(struct virtio_net *dev, bool create) { + char errmsg[RTE_STRERR_BUFSIZE]; char reco_file[PATH_MAX]; int fd, ret; const char *name = dev->ifname + strlen("/dev/vduse/"); @@ -495,16 +524,20 @@ vduse_reconnect_log_map(struct virtio_net *dev, bool create) VHOST_CONFIG_LOG(dev->ifname, ERR, "Reconnect file %s exists but not the device", reco_file); } else { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to open reconnect file %s (%s)", - reco_file, strerror(errno)); + reco_file, errmsg); } return -1; } ret = ftruncate(fd, sizeof(*dev->reconnect_log)); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to truncate reconnect file %s (%s)", - reco_file, strerror(errno)); + reco_file, errmsg); goto out_close; } } else { @@ -512,9 +545,12 @@ vduse_reconnect_log_map(struct virtio_net *dev, bool create) if (fd < 0) { if (errno == ENOENT) VHOST_CONFIG_LOG(dev->ifname, ERR, "Missing reconnect file (%s)", reco_file); - else + else { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to open reconnect file %s (%s)", - reco_file, strerror(errno)); + reco_file, errmsg); + } return -1; } } @@ -522,8 +558,10 @@ vduse_reconnect_log_map(struct virtio_net *dev, bool create) dev->reconnect_log = mmap(NULL, sizeof(*dev->reconnect_log), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (dev->reconnect_log == MAP_FAILED) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to mmap reconnect file %s (%s)", - reco_file, strerror(errno)); + reco_file, errmsg); ret = -1; goto out_close; } @@ -576,6 +614,7 @@ vduse_reconnect_handler(int fd, void *arg, int *remove) static int vduse_reconnect_start_device(struct virtio_net *dev) { + char errmsg[RTE_STRERR_BUFSIZE]; int fd, ret; /* @@ -584,8 +623,10 @@ vduse_reconnect_start_device(struct virtio_net *dev) */ fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "Failed to create reconnect efd: %s", - strerror(errno)); + errmsg); ret = -1; goto out_err; } @@ -624,6 +665,7 @@ vduse_device_create(const char *path, bool compliant_ol_flags) uint64_t features; const char *name = path + strlen("/dev/vduse/"); bool reconnect = false; + char errmsg[RTE_STRERR_BUFSIZE]; if (vduse.fdset == NULL) { vduse.fdset = fdset_init("vduse-evt"); @@ -635,14 +677,18 @@ vduse_device_create(const char *path, bool compliant_ol_flags) control_fd = open(VDUSE_CTRL_PATH, O_RDWR); if (control_fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(name, ERR, "Failed to open %s: %s", - VDUSE_CTRL_PATH, strerror(errno)); + VDUSE_CTRL_PATH, errmsg); return -1; } if (ioctl(control_fd, VDUSE_SET_API_VERSION, &ver)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(name, ERR, "Failed to set API version: %" PRIu64 ": %s", - ver, strerror(errno)); + ver, errmsg); ret = -1; goto out_ctrl_close; } @@ -698,29 +744,37 @@ vduse_device_create(const char *path, bool compliant_ol_flags) free(dev_config); dev_config = NULL; if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(name, ERR, "Failed to create VDUSE device: %s", - strerror(errno)); + errmsg); goto out_ctrl_close; } dev_fd = open(path, O_RDWR); if (dev_fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(name, ERR, "Failed to open newly created device %s: %s", - path, strerror(errno)); + path, errmsg); ret = -1; goto out_ctrl_close; } } else { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(name, ERR, "Failed to open device %s: %s", - path, strerror(errno)); + path, errmsg); ret = -1; goto out_ctrl_close; } ret = fcntl(dev_fd, F_SETFL, O_NONBLOCK); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(name, ERR, "Failed to set chardev as non-blocking: %s", - strerror(errno)); + errmsg); goto out_dev_close; } @@ -820,6 +874,7 @@ int vduse_device_destroy(const char *path) { const char *name = path + strlen("/dev/vduse/"); + char errmsg[RTE_STRERR_BUFSIZE]; struct virtio_net *dev; int vid, ret; @@ -853,8 +908,10 @@ vduse_device_destroy(const char *path) ret = ioctl(dev->vduse_ctrl_fd, VDUSE_DESTROY_DEV, name); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(name, ERR, "Failed to destroy VDUSE device: %s", - strerror(errno)); + errmsg); } else { /* * VDUSE device was no more attached to the vDPA bus, diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c index 6d92ad904e..6cde684a6e 100644 --- a/lib/vhost/vhost_user.c +++ b/lib/vhost/vhost_user.c @@ -829,10 +829,13 @@ mem_set_dump(struct virtio_net *dev, void *ptr, size_t size, bool enable, uint64 void *start = RTE_PTR_ALIGN_FLOOR(ptr, pagesz); uintptr_t end = RTE_ALIGN_CEIL((uintptr_t)ptr + size, pagesz); size_t len = end - (uintptr_t)start; + char errmsg[RTE_STRERR_BUFSIZE]; if (madvise(start, len, enable ? MADV_DODUMP : MADV_DONTDUMP) == -1) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, INFO, - "could not set coredump preference (%s).", strerror(errno)); + "could not set coredump preference (%s).", errmsg); } #endif } @@ -1192,6 +1195,7 @@ vhost_user_postcopy_region_register(struct virtio_net *dev, struct rte_vhost_mem_region *reg) { struct uffdio_register reg_struct; + char errmsg[RTE_STRERR_BUFSIZE]; /* * Let's register all the mmapped area to ensure @@ -1203,6 +1207,8 @@ vhost_user_postcopy_region_register(struct virtio_net *dev, if (ioctl(dev->postcopy_ufd, UFFDIO_REGISTER, ®_struct)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "failed to register ufd for region " "%" PRIx64 " - %" PRIx64 " (ufd = %d) %s", @@ -1210,7 +1216,7 @@ vhost_user_postcopy_region_register(struct virtio_net *dev, (uint64_t)reg_struct.range.start + (uint64_t)reg_struct.range.len - 1, dev->postcopy_ufd, - strerror(errno)); + errmsg); return -1; } @@ -1292,6 +1298,7 @@ vhost_user_mmap_region(struct virtio_net *dev, struct rte_vhost_mem_region *region, uint64_t mmap_offset) { + char errmsg[RTE_STRERR_BUFSIZE]; void *mmap_addr; uint64_t mmap_size; uint64_t alignment; @@ -1339,7 +1346,9 @@ vhost_user_mmap_region(struct virtio_net *dev, MAP_SHARED | populate, region->fd, 0); if (mmap_addr == MAP_FAILED) { - VHOST_CONFIG_LOG(dev->ifname, ERR, "mmap failed (%s).", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + VHOST_CONFIG_LOG(dev->ifname, ERR, "mmap failed (%s).", errmsg); return -1; } @@ -2770,21 +2779,25 @@ vhost_user_set_postcopy_advise(struct virtio_net **pdev, struct virtio_net *dev = *pdev; #ifdef RTE_LIBRTE_VHOST_POSTCOPY struct uffdio_api api_struct; + char errmsg[RTE_STRERR_BUFSIZE]; dev->postcopy_ufd = syscall(__NR_userfaultfd, O_CLOEXEC | O_NONBLOCK); if (dev->postcopy_ufd == -1) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, - "userfaultfd not available: %s", - strerror(errno)); + "userfaultfd not available: %s", errmsg); return RTE_VHOST_MSG_RESULT_ERR; } api_struct.api = UFFD_API; api_struct.features = 0; if (ioctl(dev->postcopy_ufd, UFFDIO_API, &api_struct)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_CONFIG_LOG(dev->ifname, ERR, "UFFDIO_API ioctl failure: %s", - strerror(errno)); + errmsg); close(dev->postcopy_ufd); dev->postcopy_ufd = -1; return RTE_VHOST_MSG_RESULT_ERR; From patchwork Mon Nov 4 11:09:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147913 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 3C53A45C76; Mon, 4 Nov 2024 12:11:26 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7211040E3E; Mon, 4 Nov 2024 12:10:50 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id C896F40659 for ; Mon, 4 Nov 2024 12:10:41 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.174]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcl4WxPzyVQ2; Mon, 4 Nov 2024 19:08:55 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 300AD140137; Mon, 4 Nov 2024 19:10:40 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:39 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 11/52] bpf: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:09:56 +0800 Message-ID: <20241104111037.3632161-12-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- lib/bpf/bpf_load_elf.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/bpf/bpf_load_elf.c b/lib/bpf/bpf_load_elf.c index e0abd3c856..569a9f4446 100644 --- a/lib/bpf/bpf_load_elf.c +++ b/lib/bpf/bpf_load_elf.c @@ -300,6 +300,7 @@ rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char *fname, { int32_t fd, rc; struct rte_bpf *bpf; + char errmsg[RTE_STRERR_BUFSIZE]; if (prm == NULL || fname == NULL || sname == NULL) { rte_errno = EINVAL; @@ -309,8 +310,10 @@ rte_bpf_elf_load(const struct rte_bpf_prm *prm, const char *fname, fd = open(fname, O_RDONLY); if (fd < 0) { rc = errno; + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); RTE_BPF_LOG_LINE(ERR, "%s(%s) error code: %d(%s)", - __func__, fname, rc, strerror(rc)); + __func__, fname, rc, errmsg); rte_errno = EINVAL; return NULL; } From patchwork Mon Nov 4 11:09:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147923 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 C410045C76; Mon, 4 Nov 2024 12:12:41 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 538EA410D2; Mon, 4 Nov 2024 12:11:03 +0100 (CET) Received: from szxga06-in.huawei.com (szxga06-in.huawei.com [45.249.212.32]) by mails.dpdk.org (Postfix) with ESMTP id E887740E24 for ; Mon, 4 Nov 2024 12:10:41 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.163]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4Xhpfy0Yjjz1ypCX; Mon, 4 Nov 2024 19:10:50 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 5FB01180019; Mon, 4 Nov 2024 19:10:40 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:40 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 12/52] bus/cdx: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:09:57 +0800 Message-ID: <20241104111037.3632161-13-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/bus/cdx/cdx.c | 6 ++-- drivers/bus/cdx/cdx_vfio.c | 58 +++++++++++++++++++++++++++++--------- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/drivers/bus/cdx/cdx.c b/drivers/bus/cdx/cdx.c index 62b108e082..3e8ac81766 100644 --- a/drivers/bus/cdx/cdx.c +++ b/drivers/bus/cdx/cdx.c @@ -264,14 +264,16 @@ cdx_scan_one(const char *dirname, const char *dev_name) static int cdx_scan(void) { + char errmsg[RTE_STRERR_BUFSIZE]; struct dirent *e; DIR *dir; char dirname[PATH_MAX]; dir = opendir(RTE_CDX_BUS_DEVICES_PATH); if (dir == NULL) { - CDX_BUS_INFO("%s(): opendir failed: %s", __func__, - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + CDX_BUS_INFO("%s(): opendir failed: %s", __func__, errmsg); return 0; } diff --git a/drivers/bus/cdx/cdx_vfio.c b/drivers/bus/cdx/cdx_vfio.c index 664f267471..a17da30701 100644 --- a/drivers/bus/cdx/cdx_vfio.c +++ b/drivers/bus/cdx/cdx_vfio.c @@ -20,6 +20,7 @@ #include #include #include +#include #include "bus_cdx_driver.h" #include "cdx_logs.h" @@ -186,6 +187,7 @@ static int cdx_vfio_setup_interrupts(struct rte_cdx_device *dev, int vfio_dev_fd, int num_irqs) { + char errmsg[RTE_STRERR_BUFSIZE]; int i, ret; if (rte_intr_dev_fd_set(dev->intr_handle, vfio_dev_fd)) @@ -203,8 +205,10 @@ cdx_vfio_setup_interrupts(struct rte_cdx_device *dev, int vfio_dev_fd, ret = ioctl(vfio_dev_fd, VFIO_DEVICE_GET_IRQ_INFO, &irq); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CDX_BUS_ERR("Cannot get VFIO IRQ info, error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -1; } @@ -221,8 +225,10 @@ cdx_vfio_setup_interrupts(struct rte_cdx_device *dev, int vfio_dev_fd, /* set up an eventfd for interrupts */ fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CDX_BUS_ERR("Cannot set up eventfd, error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -1; } @@ -244,6 +250,8 @@ static int cdx_vfio_setup_device(struct rte_cdx_device *dev, int vfio_dev_fd, int num_irqs) { + char errmsg[RTE_STRERR_BUFSIZE]; + if (cdx_vfio_setup_interrupts(dev, vfio_dev_fd, num_irqs) != 0) { CDX_BUS_ERR("Error setting up interrupts!"); return -1; @@ -254,8 +262,10 @@ cdx_vfio_setup_device(struct rte_cdx_device *dev, int vfio_dev_fd, * then it updates errno as EINVAL. */ if (ioctl(vfio_dev_fd, VFIO_DEVICE_RESET) && errno != EINVAL) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CDX_BUS_ERR("Unable to reset device! Error: %d (%s)", errno, - strerror(errno)); + errmsg); return -1; } @@ -264,8 +274,10 @@ cdx_vfio_setup_device(struct rte_cdx_device *dev, int vfio_dev_fd, * device does not support configuring bus master. */ if (rte_cdx_vfio_bm_enable(dev) && (errno != -ENOTTY)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CDX_BUS_ERR("Bus master enable failure! Error: %d (%s)", errno, - strerror(errno)); + errmsg); return -1; } @@ -393,6 +405,7 @@ cdx_vfio_map_resource_primary(struct rte_cdx_device *dev) const char *dev_name = dev->device.name; struct cdx_map *maps; int vfio_dev_fd, i, ret; + char errmsg[RTE_STRERR_BUFSIZE]; if (rte_intr_fd_set(dev->intr_handle, -1)) return -1; @@ -422,8 +435,10 @@ cdx_vfio_map_resource_primary(struct rte_cdx_device *dev) ret = cdx_vfio_get_region_info(vfio_dev_fd, ®, i); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CDX_BUS_ERR("%s cannot get device region info error %i (%s)", - dev_name, errno, strerror(errno)); + dev_name, errno, errmsg); goto err_vfio_res; } @@ -450,8 +465,10 @@ cdx_vfio_map_resource_primary(struct rte_cdx_device *dev) ret = cdx_vfio_mmap_resource(vfio_dev_fd, vfio_res, i, 0); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CDX_BUS_ERR("%s mapping region %i failed: %s", - cdx_addr, i, strerror(errno)); + cdx_addr, i, errmsg); free(reg); goto err_vfio_res; } @@ -489,6 +506,7 @@ cdx_vfio_map_resource_secondary(struct rte_cdx_device *dev) struct mapped_cdx_res_list *vfio_res_list = RTE_TAILQ_CAST(cdx_vfio_tailq.head, mapped_cdx_res_list); const char *dev_name = dev->device.name; + char errmsg[RTE_STRERR_BUFSIZE]; struct cdx_map *maps; if (rte_intr_fd_set(dev->intr_handle, -1)) @@ -518,8 +536,10 @@ cdx_vfio_map_resource_secondary(struct rte_cdx_device *dev) for (i = 0; i < vfio_res->nb_maps; i++) { ret = cdx_vfio_mmap_resource(vfio_dev_fd, vfio_res, i, MAP_FIXED); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CDX_BUS_ERR("%s mapping MMIO region %i failed: %s", - dev_name, i, strerror(errno)); + dev_name, i, errmsg); goto err_vfio_dev_fd; } @@ -617,6 +637,7 @@ rte_cdx_vfio_bm_enable(struct rte_cdx_device *dev) struct vfio_device_info device_info = { .argsz = sizeof(device_info) }; struct vfio_device_feature_bus_master *vfio_bm_feature; struct vfio_device_feature *feature; + char errmsg[RTE_STRERR_BUFSIZE]; int vfio_dev_fd, ret; size_t argsz; @@ -638,8 +659,10 @@ rte_cdx_vfio_bm_enable(struct rte_cdx_device *dev) feature->flags |= VFIO_DEVICE_FEATURE_SET; ret = ioctl(vfio_dev_fd, RTE_VFIO_DEVICE_FEATURE, feature); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CDX_BUS_ERR("Bus Master configuring not supported for device: %s, error: %d (%s)", - dev->name, errno, strerror(errno)); + dev->name, errno, errmsg); free(feature); return ret; } @@ -647,9 +670,12 @@ rte_cdx_vfio_bm_enable(struct rte_cdx_device *dev) feature->flags = RTE_VFIO_DEVICE_FEATURE_BUS_MASTER | VFIO_DEVICE_FEATURE_SET; vfio_bm_feature->op = VFIO_DEVICE_FEATURE_SET_MASTER; ret = ioctl(vfio_dev_fd, RTE_VFIO_DEVICE_FEATURE, feature); - if (ret < 0) + if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CDX_BUS_ERR("BM Enable Error for device: %s, Error: %d (%s)", - dev->name, errno, strerror(errno)); + dev->name, errno, errmsg); + } free(feature); return ret; @@ -661,6 +687,7 @@ rte_cdx_vfio_bm_disable(struct rte_cdx_device *dev) { struct vfio_device_feature_bus_master *vfio_bm_feature; struct vfio_device_feature *feature; + char errmsg[RTE_STRERR_BUFSIZE]; int vfio_dev_fd, ret; size_t argsz; @@ -682,8 +709,10 @@ rte_cdx_vfio_bm_disable(struct rte_cdx_device *dev) feature->flags |= VFIO_DEVICE_FEATURE_SET; ret = ioctl(vfio_dev_fd, RTE_VFIO_DEVICE_FEATURE, feature); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CDX_BUS_ERR("Bus Master configuring not supported for device: %s, Error: %d (%s)", - dev->name, errno, strerror(errno)); + dev->name, errno, errmsg); free(feature); return ret; } @@ -691,9 +720,12 @@ rte_cdx_vfio_bm_disable(struct rte_cdx_device *dev) feature->flags = RTE_VFIO_DEVICE_FEATURE_BUS_MASTER | VFIO_DEVICE_FEATURE_SET; vfio_bm_feature->op = VFIO_DEVICE_FEATURE_CLEAR_MASTER; ret = ioctl(vfio_dev_fd, RTE_VFIO_DEVICE_FEATURE, feature); - if (ret < 0) + if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CDX_BUS_ERR("BM Disable Error for device: %s, Error: %d (%s)", - dev->name, errno, strerror(errno)); + dev->name, errno, errmsg); + } free(feature); return ret; From patchwork Mon Nov 4 11:09:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147910 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 C431A45C76; Mon, 4 Nov 2024 12:11:05 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 70B6F40E41; Mon, 4 Nov 2024 12:10:46 +0100 (CET) Received: from szxga07-in.huawei.com (szxga07-in.huawei.com [45.249.212.35]) by mails.dpdk.org (Postfix) with ESMTP id 8BA0B40E21 for ; Mon, 4 Nov 2024 12:10:41 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.44]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcs2yQvz1SDy0; Mon, 4 Nov 2024 19:09:01 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 85E691400D2; Mon, 4 Nov 2024 19:10:40 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:40 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 13/52] bus/dpaa: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:09:58 +0800 Message-ID: <20241104111037.3632161-14-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/bus/dpaa/base/fman/fman.c | 8 ++++++-- drivers/bus/dpaa/dpaa_bus.c | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/bus/dpaa/base/fman/fman.c b/drivers/bus/dpaa/base/fman/fman.c index d49339d81e..d9593cf459 100644 --- a/drivers/bus/dpaa/base/fman/fman.c +++ b/drivers/bus/dpaa/base/fman/fman.c @@ -1132,6 +1132,7 @@ fman_init(void) void fman_finish(void) { + char errmsg[RTE_STRERR_BUFSIZE]; struct __fman_if *__if, *tmpif; assert(fman_ccsr_map_fd != -1); @@ -1153,8 +1154,11 @@ fman_finish(void) in_be32(__if->ccsr_map + 8) & ~(u32)3); /* release the mapping */ _errno = munmap(__if->ccsr_map, __if->regs_size); - if (unlikely(_errno < 0)) - FMAN_ERR(_errno, "munmap() = (%s)", strerror(errno)); + if (unlikely(_errno < 0)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + FMAN_ERR(_errno, "munmap() = (%s)", errmsg); + } DPAA_BUS_INFO("Tearing down %s", __if->node_path); list_del(&__if->__if.node); rte_free(__if); diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c index 9ffbe07c93..8fabd74899 100644 --- a/drivers/bus/dpaa/dpaa_bus.c +++ b/drivers/bus/dpaa/dpaa_bus.c @@ -627,12 +627,15 @@ rte_dpaa_bus_dev_build(void) static int rte_dpaa_setup_intr(struct rte_intr_handle *intr_handle) { + char errmsg[RTE_STRERR_BUFSIZE]; int fd; fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DPAA_BUS_ERR("Cannot set up eventfd, error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return errno; } From patchwork Mon Nov 4 11:09:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147927 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 9F40B45C76; Mon, 4 Nov 2024 12:13:06 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E7256410FC; Mon, 4 Nov 2024 12:11:07 +0100 (CET) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) by mails.dpdk.org (Postfix) with ESMTP id 314E440E27 for ; Mon, 4 Nov 2024 12:10:42 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.234]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4XhpYV5FM2z1JB6K; Mon, 4 Nov 2024 19:06:06 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id AE5AF1401F3; Mon, 4 Nov 2024 19:10:40 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:40 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 14/52] bus/fslmc: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:09:59 +0800 Message-ID: <20241104111037.3632161-15-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/bus/fslmc/fslmc_vfio.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/drivers/bus/fslmc/fslmc_vfio.c b/drivers/bus/fslmc/fslmc_vfio.c index 6981679a2d..b6647dc38d 100644 --- a/drivers/bus/fslmc/fslmc_vfio.c +++ b/drivers/bus/fslmc/fslmc_vfio.c @@ -448,6 +448,7 @@ fslmc_vfio_setup_device(const char *sysfs_base, const char *dev_addr, .argsz = sizeof(group_status) }; int vfio_group_fd, vfio_container_fd, iommu_group_no, ret; + char errmsg[RTE_STRERR_BUFSIZE]; /* get group number */ ret = rte_vfio_get_group_num(sysfs_base, dev_addr, &iommu_group_no); @@ -479,9 +480,11 @@ fslmc_vfio_setup_device(const char *sysfs_base, const char *dev_addr, /* check if the group is viable */ ret = ioctl(vfio_group_fd, VFIO_GROUP_GET_STATUS, &group_status); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DPAA2_BUS_ERR(" %s cannot get group status, " "error %i (%s)", dev_addr, - errno, strerror(errno)); + errno, errmsg); close(vfio_group_fd); rte_vfio_clear_group(vfio_group_fd); return -1; @@ -502,9 +505,11 @@ fslmc_vfio_setup_device(const char *sysfs_base, const char *dev_addr, ret = ioctl(vfio_group_fd, VFIO_GROUP_SET_CONTAINER, &vfio_container_fd); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DPAA2_BUS_ERR(" %s cannot add VFIO group to container, " "error %i (%s)", dev_addr, - errno, strerror(errno)); + errno, errmsg); close(vfio_group_fd); close(vfio_container_fd); rte_vfio_clear_group(vfio_group_fd); @@ -550,8 +555,10 @@ fslmc_vfio_setup_device(const char *sysfs_base, const char *dev_addr, /* test and setup the device */ ret = ioctl(*vfio_dev_fd, VFIO_DEVICE_GET_INFO, device_info); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DPAA2_BUS_ERR(" %s cannot get device info, error %i (%s)", - dev_addr, errno, strerror(errno)); + dev_addr, errno, errmsg); close(*vfio_dev_fd); close(vfio_group_fd); close(vfio_container_fd); @@ -599,6 +606,7 @@ int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index) char irq_set_buf[IRQ_SET_BUF_LEN]; struct vfio_irq_set *irq_set; int *fd_ptr, vfio_dev_fd; + char errmsg[RTE_STRERR_BUFSIZE]; len = sizeof(irq_set_buf); @@ -615,9 +623,10 @@ int rte_dpaa2_intr_enable(struct rte_intr_handle *intr_handle, int index) vfio_dev_fd = rte_intr_dev_fd_get(intr_handle); ret = ioctl(vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DPAA2_BUS_ERR("Error:dpaa2 SET IRQs fd=%d, err = %d(%s)", - rte_intr_fd_get(intr_handle), errno, - strerror(errno)); + rte_intr_fd_get(intr_handle), errno, errmsg); return ret; } @@ -655,6 +664,7 @@ rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle, int vfio_dev_fd, int num_irqs) { + char errmsg[RTE_STRERR_BUFSIZE]; int i, ret; /* start from MSI-X interrupt type */ @@ -666,8 +676,10 @@ rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle, ret = ioctl(vfio_dev_fd, VFIO_DEVICE_GET_IRQ_INFO, &irq_info); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DPAA2_BUS_ERR("Cannot get IRQ(%d) info, error %i (%s)", - i, errno, strerror(errno)); + i, errno, errmsg); return -1; } @@ -681,8 +693,10 @@ rte_dpaa2_vfio_setup_intr(struct rte_intr_handle *intr_handle, /* set up an eventfd for interrupts */ fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DPAA2_BUS_ERR("Cannot set up eventfd, error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -1; } From patchwork Mon Nov 4 11:10:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147940 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 418A945C76; Mon, 4 Nov 2024 12:14:30 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B93B1427AA; Mon, 4 Nov 2024 12:11:24 +0100 (CET) Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by mails.dpdk.org (Postfix) with ESMTP id 7175040E39 for ; Mon, 4 Nov 2024 12:10:44 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.162.254]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4Xhpc73SS6z1T9k5; Mon, 4 Nov 2024 19:08:23 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id D90CD180105; Mon, 4 Nov 2024 19:10:40 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:40 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 15/52] bus/pci: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:00 +0800 Message-ID: <20241104111037.3632161-16-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/bus/pci/bsd/pci.c | 20 +++++++++--- drivers/bus/pci/linux/pci.c | 16 ++++++++-- drivers/bus/pci/linux/pci_uio.c | 50 +++++++++++++++++++++++------- drivers/bus/pci/linux/pci_vfio.c | 52 +++++++++++++++++++++++++------- drivers/bus/pci/pci_common_uio.c | 6 +++- 5 files changed, 114 insertions(+), 30 deletions(-) diff --git a/drivers/bus/pci/bsd/pci.c b/drivers/bus/pci/bsd/pci.c index 2f88252418..916832af7e 100644 --- a/drivers/bus/pci/bsd/pci.c +++ b/drivers/bus/pci/bsd/pci.c @@ -38,6 +38,7 @@ #include #include #include +#include #include "eal_filesystem.h" #include "private.h" @@ -101,6 +102,7 @@ int pci_uio_alloc_resource(struct rte_pci_device *dev, struct mapped_pci_resource **uio_res) { + char errmsg[RTE_STRERR_BUFSIZE]; char devname[PATH_MAX]; /* contains the /dev/uioX */ struct rte_pci_addr *loc; @@ -122,7 +124,9 @@ pci_uio_alloc_resource(struct rte_pci_device *dev, } if (rte_intr_fd_get(dev->intr_handle) < 0) { - PCI_LOG(ERR, "Cannot open %s: %s", devname, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "Cannot open %s: %s", devname, errmsg); goto error; } @@ -156,6 +160,7 @@ pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx, uint64_t offset; uint64_t pagesz; struct pci_map *maps; + char errmsg[RTE_STRERR_BUFSIZE]; maps = uio_res->maps; devname = uio_res->path; @@ -164,7 +169,9 @@ pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx, /* allocate memory to keep path */ maps[map_idx].path = rte_malloc(NULL, strlen(devname) + 1, 0); if (maps[map_idx].path == NULL) { - PCI_LOG(ERR, "Cannot allocate memory for path: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "Cannot allocate memory for path: %s", errmsg); return -1; } @@ -173,7 +180,9 @@ pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx, */ fd = open(devname, O_RDWR); if (fd < 0) { - PCI_LOG(ERR, "Cannot open %s: %s", devname, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "Cannot open %s: %s", devname, errmsg); goto error; } @@ -331,6 +340,7 @@ rte_pci_scan(void) .match_buf_len = sizeof(matches), .matches = &matches[0], }; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_pci_addr pci_addr; /* for debug purposes, PCI can be disabled */ @@ -346,8 +356,10 @@ rte_pci_scan(void) do { unsigned i; if (ioctl(fd, PCIOCGETCONF, &conf_io) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "%s(): error with ioctl on /dev/pci: %s", - __func__, strerror(errno)); + __func__, errmsg); goto error; } diff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c index 9056035b33..2ef17a288e 100644 --- a/drivers/bus/pci/linux/pci.c +++ b/drivers/bus/pci/linux/pci.c @@ -12,6 +12,7 @@ #include #include #include +#include #include "eal_filesystem.h" @@ -442,6 +443,7 @@ rte_pci_scan(void) DIR *dir; char dirname[PATH_MAX]; struct rte_pci_addr addr; + char errmsg[RTE_STRERR_BUFSIZE]; /* for debug purposes, PCI can be disabled */ if (!rte_eal_has_pci()) @@ -449,7 +451,9 @@ rte_pci_scan(void) dir = opendir(rte_pci_get_sysfs_path()); if (dir == NULL) { - PCI_LOG(ERR, "%s(): opendir failed: %s", __func__, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "%s(): opendir failed: %s", __func__, errmsg); return -1; } @@ -487,6 +491,7 @@ pci_device_iommu_support_va(const struct rte_pci_device *dev) char filename[PATH_MAX]; FILE *fp; uint64_t mgaw, vtd_cap_reg = 0; + char errmsg[RTE_STRERR_BUFSIZE]; snprintf(filename, sizeof(filename), "%s/" PCI_PRI_FMT "/iommu/intel-iommu/cap", @@ -499,8 +504,10 @@ pci_device_iommu_support_va(const struct rte_pci_device *dev) if (errno == ENOENT) return true; + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "%s(): can't open %s: %s", - __func__, filename, strerror(errno)); + __func__, filename, errmsg); return false; } @@ -547,11 +554,14 @@ pci_device_iommu_support_va(__rte_unused const struct rte_pci_device *dev) char filename[PATH_MAX] = "/proc/cpuinfo"; FILE *fp = fopen(filename, "r"); bool pseries = false, powernv = false, qemu = false; + char errmsg[RTE_STRERR_BUFSIZE]; bool ret = false; if (fp == NULL) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "%s(): can't open %s: %s", - __func__, filename, strerror(errno)); + __func__, filename, errmsg); return ret; } diff --git a/drivers/bus/pci/linux/pci_uio.c b/drivers/bus/pci/linux/pci_uio.c index 4c1d3327a9..77a41beb77 100644 --- a/drivers/bus/pci/linux/pci_uio.c +++ b/drivers/bus/pci/linux/pci_uio.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "eal_filesystem.h" #include "pci_init.h" @@ -79,6 +80,7 @@ pci_uio_mmio_write(const struct rte_pci_device *dev, int bar, static int pci_mknod_uio_dev(const char *sysfs_uio_path, unsigned uio_num) { + char errmsg[RTE_STRERR_BUFSIZE]; FILE *f; char filename[PATH_MAX]; int ret; @@ -108,7 +110,9 @@ pci_mknod_uio_dev(const char *sysfs_uio_path, unsigned uio_num) dev = makedev(major, minor); ret = mknod(filename, S_IFCHR | S_IRUSR | S_IWUSR, dev); if (ret != 0) { - PCI_LOG(ERR, "%s(): mknod() failed %s", __func__, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "%s(): mknod() failed %s", __func__, errmsg); return -1; } @@ -217,6 +221,7 @@ int pci_uio_alloc_resource(struct rte_pci_device *dev, struct mapped_pci_resource **uio_res) { + char errmsg[RTE_STRERR_BUFSIZE]; char dirname[PATH_MAX]; char cfgname[PATH_MAX]; char devname[PATH_MAX]; /* contains the /dev/uioX */ @@ -237,7 +242,9 @@ pci_uio_alloc_resource(struct rte_pci_device *dev, /* save fd */ fd = open(devname, O_RDWR); if (fd < 0) { - PCI_LOG(ERR, "Cannot open %s: %s", devname, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "Cannot open %s: %s", devname, errmsg); goto error; } @@ -249,7 +256,9 @@ pci_uio_alloc_resource(struct rte_pci_device *dev, uio_cfg_fd = open(cfgname, O_RDWR); if (uio_cfg_fd < 0) { - PCI_LOG(ERR, "Cannot open %s: %s", cfgname, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "Cannot open %s: %s", cfgname, errmsg); goto error; } @@ -294,6 +303,7 @@ int pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx, struct mapped_pci_resource *uio_res, int map_idx) { + char errmsg[RTE_STRERR_BUFSIZE]; int fd = -1; char devname[PATH_MAX]; void *mapaddr; @@ -310,7 +320,9 @@ pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx, /* allocate memory to keep path */ maps[map_idx].path = rte_malloc(NULL, sizeof(devname), 0); if (maps[map_idx].path == NULL) { - PCI_LOG(ERR, "Cannot allocate memory for path: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "Cannot allocate memory for path: %s", errmsg); return -1; } @@ -342,7 +354,9 @@ pci_uio_map_resource_by_index(struct rte_pci_device *dev, int res_idx, /* then try to map resource file */ fd = open(devname, O_RDWR); if (fd < 0) { - PCI_LOG(ERR, "Cannot open %s: %s", devname, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "Cannot open %s: %s", devname, errmsg); goto error; } } @@ -383,6 +397,7 @@ int pci_uio_ioport_map(struct rte_pci_device *dev, int bar, struct rte_pci_ioport *p) { + char errmsg[RTE_STRERR_BUFSIZE]; FILE *f = NULL; char dirname[PATH_MAX]; char filename[PATH_MAX]; @@ -397,7 +412,9 @@ pci_uio_ioport_map(struct rte_pci_device *dev, int bar, dev->addr.devid, dev->addr.function); f = fopen(filename, "r"); if (f == NULL) { - PCI_LOG(ERR, "%s(): Cannot open sysfs resource: %s", __func__, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "%s(): Cannot open sysfs resource: %s", __func__, errmsg); return -1; } @@ -438,14 +455,18 @@ pci_uio_ioport_map(struct rte_pci_device *dev, int bar, RTE_INTR_HANDLE_UNKNOWN) { int uio_num = pci_get_uio_dev(dev, dirname, sizeof(dirname), 0); if (uio_num < 0) { - PCI_LOG(ERR, "cannot open %s: %s", dirname, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "cannot open %s: %s", dirname, errmsg); goto error; } snprintf(filename, sizeof(filename), "/dev/uio%u", uio_num); fd = open(filename, O_RDWR); if (fd < 0) { - PCI_LOG(ERR, "Cannot open %s: %s", filename, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "Cannot open %s: %s", filename, errmsg); goto error; } if (rte_intr_fd_set(dev->intr_handle, fd)) @@ -474,6 +495,7 @@ pci_uio_ioport_map(struct rte_pci_device *dev, int bar, FILE *f; char buf[BUFSIZ]; char filename[PATH_MAX]; + char errmsg[RTE_STRERR_BUFSIZE]; uint64_t phys_addr, end_addr, flags; int fd, i; void *addr; @@ -484,7 +506,9 @@ pci_uio_ioport_map(struct rte_pci_device *dev, int bar, dev->addr.devid, dev->addr.function); f = fopen(filename, "r"); if (f == NULL) { - PCI_LOG(ERR, "Cannot open sysfs resource: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "Cannot open sysfs resource: %s", errmsg); return -1; } for (i = 0; i < bar + 1; i++) { @@ -507,14 +531,18 @@ pci_uio_ioport_map(struct rte_pci_device *dev, int bar, /* mmap the pci resource */ fd = open(filename, O_RDWR); if (fd < 0) { - PCI_LOG(ERR, "Cannot open %s: %s", filename, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "Cannot open %s: %s", filename, errmsg); goto error; } addr = mmap(NULL, end_addr + 1, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); close(fd); if (addr == MAP_FAILED) { - PCI_LOG(ERR, "Cannot mmap IO port resource: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "Cannot mmap IO port resource: %s", errmsg); goto error; } diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c index 5317170231..ed1b458a9d 100644 --- a/drivers/bus/pci/linux/pci_vfio.c +++ b/drivers/bus/pci/linux/pci_vfio.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "eal_filesystem.h" @@ -180,6 +181,7 @@ pci_vfio_setup_interrupts(struct rte_pci_device *dev, int vfio_dev_fd) { int i, ret, intr_idx; enum rte_intr_mode intr_mode; + char errmsg[RTE_STRERR_BUFSIZE]; /* default to invalid index */ intr_idx = VFIO_PCI_NUM_IRQS; @@ -222,8 +224,10 @@ pci_vfio_setup_interrupts(struct rte_pci_device *dev, int vfio_dev_fd) ret = ioctl(vfio_dev_fd, VFIO_DEVICE_GET_IRQ_INFO, &irq); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "Cannot get VFIO IRQ info, error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -1; } @@ -248,8 +252,10 @@ pci_vfio_setup_interrupts(struct rte_pci_device *dev, int vfio_dev_fd) /* set up an eventfd for interrupts */ fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "Cannot set up eventfd, error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -1; } @@ -323,14 +329,17 @@ pci_vfio_req_handler(void *param) static int pci_vfio_enable_notifier(struct rte_pci_device *dev, int vfio_dev_fd) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret; int fd = -1; /* set up an eventfd for req notifier */ fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "Cannot set up eventfd, error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return -1; } @@ -431,6 +440,8 @@ pci_vfio_is_ioport_bar(const struct rte_pci_device *dev, int vfio_dev_fd, static int pci_rte_vfio_setup_device(struct rte_pci_device *dev, int vfio_dev_fd) { + char errmsg[RTE_STRERR_BUFSIZE]; + if (pci_vfio_setup_interrupts(dev, vfio_dev_fd) != 0) { PCI_LOG(ERR, "Error setting up interrupts!"); return -1; @@ -451,7 +462,9 @@ pci_rte_vfio_setup_device(struct rte_pci_device *dev, int vfio_dev_fd) * then it updates errno as EINVAL. */ if (ioctl(vfio_dev_fd, VFIO_DEVICE_RESET) && errno != EINVAL) { - PCI_LOG(ERR, "Unable to reset device! Error: %d (%s)", errno, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PCI_LOG(ERR, "Unable to reset device! Error: %d (%s)", errno, errmsg); return -1; } @@ -715,6 +728,7 @@ pci_vfio_fill_regions(struct rte_pci_device *dev, int vfio_dev_fd, { struct rte_pci_device_internal *pdev = RTE_PCI_DEVICE_INTERNAL(dev); struct vfio_region_info *reg = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; int nb_maps, i, ret; nb_maps = RTE_MIN((int)device_info->num_regions, @@ -723,8 +737,10 @@ pci_vfio_fill_regions(struct rte_pci_device *dev, int vfio_dev_fd, for (i = 0; i < nb_maps; i++) { ret = pci_vfio_get_region_info(vfio_dev_fd, ®, i); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(DEBUG, "%s cannot get device region info error %i (%s)", - dev->name, errno, strerror(errno)); + dev->name, errno, errmsg); return -1; } @@ -750,6 +766,7 @@ pci_vfio_map_resource_primary(struct rte_pci_device *dev) struct mapped_pci_resource *vfio_res = NULL; struct mapped_pci_res_list *vfio_res_list = RTE_TAILQ_CAST(rte_vfio_tailq.head, mapped_pci_res_list); + char errmsg[RTE_STRERR_BUFSIZE]; struct pci_map *maps; @@ -791,8 +808,10 @@ pci_vfio_map_resource_primary(struct rte_pci_device *dev) ret = pci_vfio_get_region_info(vfio_dev_fd, ®, VFIO_PCI_CONFIG_REGION_INDEX); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "%s cannot get device region info error %i (%s)", - dev->name, errno, strerror(errno)); + dev->name, errno, errmsg); goto err_vfio_res; } pdev->region[VFIO_PCI_CONFIG_REGION_INDEX].size = reg->size; @@ -829,8 +848,10 @@ pci_vfio_map_resource_primary(struct rte_pci_device *dev) ret = pci_vfio_get_region_info(vfio_dev_fd, ®, i); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "%s cannot get device region info error %i (%s)", - pci_addr, errno, strerror(errno)); + pci_addr, errno, errmsg); goto err_map; } @@ -890,16 +911,20 @@ pci_vfio_map_resource_primary(struct rte_pci_device *dev) if (maps[i].nr_areas > 0) { ret = pci_vfio_sparse_mmap_bar(vfio_dev_fd, vfio_res, i, 0); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "%s sparse mapping BAR%i failed: %s", - pci_addr, i, strerror(errno)); + pci_addr, i, errmsg); free(reg); goto err_map; } } else { ret = pci_vfio_mmap_bar(vfio_dev_fd, vfio_res, i, 0); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "%s mapping BAR%i failed: %s", - pci_addr, i, strerror(errno)); + pci_addr, i, errmsg); free(reg); goto err_map; } @@ -951,6 +976,7 @@ pci_vfio_map_resource_secondary(struct rte_pci_device *dev) struct mapped_pci_resource *vfio_res = NULL; struct mapped_pci_res_list *vfio_res_list = RTE_TAILQ_CAST(rte_vfio_tailq.head, mapped_pci_res_list); + char errmsg[RTE_STRERR_BUFSIZE]; struct pci_map *maps; @@ -994,15 +1020,19 @@ pci_vfio_map_resource_secondary(struct rte_pci_device *dev) if (maps[i].nr_areas > 0) { ret = pci_vfio_sparse_mmap_bar(vfio_dev_fd, vfio_res, i, MAP_FIXED); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "%s sparse mapping BAR%i failed: %s", - pci_addr, i, strerror(errno)); + pci_addr, i, errmsg); goto err_vfio_dev_fd; } } else { ret = pci_vfio_mmap_bar(vfio_dev_fd, vfio_res, i, MAP_FIXED); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "%s mapping BAR%i failed: %s", - pci_addr, i, strerror(errno)); + pci_addr, i, errmsg); goto err_vfio_dev_fd; } } diff --git a/drivers/bus/pci/pci_common_uio.c b/drivers/bus/pci/pci_common_uio.c index 30503bd23a..87f134385c 100644 --- a/drivers/bus/pci/pci_common_uio.c +++ b/drivers/bus/pci/pci_common_uio.c @@ -15,6 +15,7 @@ #include #include #include +#include #include "private.h" @@ -27,6 +28,7 @@ static int pci_uio_map_secondary(struct rte_pci_device *dev) { int fd, i = 0, j, res_idx; + char errmsg[RTE_STRERR_BUFSIZE]; struct mapped_pci_resource *uio_res; struct mapped_pci_res_list *uio_res_list = RTE_TAILQ_CAST(rte_uio_tailq.head, mapped_pci_res_list); @@ -51,8 +53,10 @@ pci_uio_map_secondary(struct rte_pci_device *dev) */ fd = open(uio_res->maps[i].path, O_RDWR); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PCI_LOG(ERR, "Cannot open %s: %s", - uio_res->maps[i].path, strerror(errno)); + uio_res->maps[i].path, errmsg); return -1; } From patchwork Mon Nov 4 11:10:01 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147916 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 31EE745C76; Mon, 4 Nov 2024 12:11:53 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 00F1440E3B; Mon, 4 Nov 2024 12:10:55 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 1D79A40E26 for ; Mon, 4 Nov 2024 12:10:42 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.105]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4Xhpc72jYLz10PYt; Mon, 4 Nov 2024 19:08:23 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 0F1E81402C8; Mon, 4 Nov 2024 19:10:41 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:40 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 16/52] bus/vmbus: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:01 +0800 Message-ID: <20241104111037.3632161-17-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/bus/vmbus/linux/vmbus_bus.c | 16 ++++++-- drivers/bus/vmbus/linux/vmbus_uio.c | 55 +++++++++++++++++++--------- drivers/bus/vmbus/vmbus_common.c | 13 +++++-- drivers/bus/vmbus/vmbus_common_uio.c | 7 +++- 4 files changed, 65 insertions(+), 26 deletions(-) diff --git a/drivers/bus/vmbus/linux/vmbus_bus.c b/drivers/bus/vmbus/linux/vmbus_bus.c index 01d8111b85..feb80518bf 100644 --- a/drivers/bus/vmbus/linux/vmbus_bus.c +++ b/drivers/bus/vmbus/linux/vmbus_bus.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "eal_filesystem.h" #include "private.h" @@ -43,14 +44,17 @@ extern struct rte_vmbus_bus rte_vmbus_bus; static int parse_sysfs_uuid(const char *filename, rte_uuid_t uu) { + char errmsg[RTE_STRERR_BUFSIZE]; char buf[BUFSIZ]; char *cp, *in = buf; FILE *f; f = fopen(filename, "r"); if (f == NULL) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VMBUS_LOG(ERR, "cannot open sysfs value %s: %s", - filename, strerror(errno)); + filename, errmsg); return -1; } @@ -86,13 +90,16 @@ parse_sysfs_uuid(const char *filename, rte_uuid_t uu) static int get_sysfs_string(const char *filename, char *buf, size_t buflen) { + char errmsg[RTE_STRERR_BUFSIZE]; char *cp; FILE *f; f = fopen(filename, "r"); if (f == NULL) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VMBUS_LOG(ERR, "cannot open sysfs value %s:%s", - filename, strerror(errno)); + filename, errmsg); return -1; } @@ -341,6 +348,7 @@ vmbus_scan_one(const char *name) int rte_vmbus_scan(void) { + char errmsg[RTE_STRERR_BUFSIZE]; struct dirent *e; DIR *dir; @@ -349,8 +357,10 @@ rte_vmbus_scan(void) if (errno == ENOENT) return 0; + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VMBUS_LOG(ERR, "opendir %s failed: %s", - SYSFS_VMBUS_DEVICES, strerror(errno)); + SYSFS_VMBUS_DEVICES, errmsg); return -1; } diff --git a/drivers/bus/vmbus/linux/vmbus_uio.c b/drivers/bus/vmbus/linux/vmbus_uio.c index 26edef342d..3e7bc618e4 100644 --- a/drivers/bus/vmbus/linux/vmbus_uio.c +++ b/drivers/bus/vmbus/linux/vmbus_uio.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "private.h" @@ -29,17 +30,21 @@ static void *vmbus_map_addr; /* Control interrupts */ void vmbus_uio_irq_control(struct rte_vmbus_device *dev, int32_t onoff) { + char errmsg[RTE_STRERR_BUFSIZE]; if ((rte_intr_fd_get(dev->intr_handle) < 0) || write(rte_intr_fd_get(dev->intr_handle), &onoff, sizeof(onoff)) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VMBUS_LOG(ERR, "cannot write to %d:%s", rte_intr_fd_get(dev->intr_handle), - strerror(errno)); + errmsg); } } int vmbus_uio_irq_read(struct rte_vmbus_device *dev) { + char errmsg[RTE_STRERR_BUFSIZE]; int32_t count; int cc; @@ -50,8 +55,9 @@ int vmbus_uio_irq_read(struct rte_vmbus_device *dev) sizeof(count)); if (cc < (int)sizeof(count)) { if (cc < 0) { - VMBUS_LOG(ERR, "IRQ read failed %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + VMBUS_LOG(ERR, "IRQ read failed %s", errmsg); return -errno; } VMBUS_LOG(ERR, "can't read IRQ count"); @@ -83,6 +89,7 @@ int vmbus_uio_alloc_resource(struct rte_vmbus_device *dev, struct mapped_vmbus_resource **uio_res) { + char errmsg[RTE_STRERR_BUFSIZE]; char devname[PATH_MAX]; /* contains the /dev/uioX */ int fd; @@ -90,8 +97,9 @@ vmbus_uio_alloc_resource(struct rte_vmbus_device *dev, snprintf(devname, sizeof(devname), "/dev/uio%u", dev->uio_num); fd = open(devname, O_RDWR); if (fd < 0) { - VMBUS_LOG(ERR, "Cannot open %s: %s", - devname, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + VMBUS_LOG(ERR, "Cannot open %s: %s", devname, errmsg); goto error; } @@ -150,6 +158,7 @@ vmbus_uio_map_resource_by_index(struct rte_vmbus_device *dev, int idx, { size_t size = dev->resource[idx].len; struct vmbus_map *maps = uio_res->maps; + char errmsg[RTE_STRERR_BUFSIZE]; void *mapaddr; off_t offset; int fd; @@ -157,8 +166,9 @@ vmbus_uio_map_resource_by_index(struct rte_vmbus_device *dev, int idx, /* devname for mmap */ fd = open(uio_res->path, O_RDWR); if (fd < 0) { - VMBUS_LOG(ERR, "Cannot open %s: %s", - uio_res->path, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + VMBUS_LOG(ERR, "Cannot open %s: %s", uio_res->path, errmsg); return -1; } @@ -211,6 +221,7 @@ static int vmbus_uio_map_subchan(const struct rte_vmbus_device *dev, const struct vmbus_channel *chan, void **ring_buf, uint32_t *ring_size) { + char errmsg[RTE_STRERR_BUFSIZE]; char ring_path[PATH_MAX]; size_t file_size; struct stat sb; @@ -255,14 +266,16 @@ static int vmbus_uio_map_subchan(const struct rte_vmbus_device *dev, fd = open(ring_path, O_RDWR); if (fd < 0) { - VMBUS_LOG(ERR, "Cannot open %s: %s", - ring_path, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + VMBUS_LOG(ERR, "Cannot open %s: %s", ring_path, errmsg); return -errno; } if (fstat(fd, &sb) < 0) { - VMBUS_LOG(ERR, "Cannot state %s: %s", - ring_path, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + VMBUS_LOG(ERR, "Cannot state %s: %s", ring_path, errmsg); close(fd); return -errno; } @@ -334,6 +347,7 @@ int vmbus_uio_map_rings(struct vmbus_channel *chan) static int vmbus_uio_sysfs_read(const char *dir, const char *name, unsigned long *val, unsigned long max_range) { + char errmsg[RTE_STRERR_BUFSIZE]; char path[PATH_MAX]; FILE *f; int ret; @@ -341,8 +355,9 @@ static int vmbus_uio_sysfs_read(const char *dir, const char *name, snprintf(path, sizeof(path), "%s/%s", dir, name); f = fopen(path, "r"); if (!f) { - VMBUS_LOG(ERR, "can't open %s:%s", - path, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + VMBUS_LOG(ERR, "can't open %s:%s", path, errmsg); return -errno; } @@ -393,6 +408,7 @@ int vmbus_uio_get_subchan(struct vmbus_channel *primary, { const struct rte_vmbus_device *dev = primary->device; char chan_path[PATH_MAX], subchan_path[PATH_MAX]; + char errmsg[RTE_STRERR_BUFSIZE]; struct dirent *ent; DIR *chan_dir; int err; @@ -403,8 +419,9 @@ int vmbus_uio_get_subchan(struct vmbus_channel *primary, chan_dir = opendir(chan_path); if (!chan_dir) { - VMBUS_LOG(ERR, "cannot open %s: %s", - chan_path, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + VMBUS_LOG(ERR, "cannot open %s: %s", chan_path, errmsg); return -errno; } @@ -440,8 +457,10 @@ int vmbus_uio_get_subchan(struct vmbus_channel *primary, err = vmbus_uio_sysfs_read(subchan_path, "subchannel_id", &subid, UINT16_MAX); if (err) { + if (strerror_r(-err, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -err); VMBUS_LOG(NOTICE, "no subchannel_id in %s:%s", - subchan_path, strerror(-err)); + subchan_path, errmsg); goto fail; } @@ -451,8 +470,10 @@ int vmbus_uio_get_subchan(struct vmbus_channel *primary, err = vmbus_uio_sysfs_read(subchan_path, "monitor_id", &monid, UINT8_MAX); if (err) { + if (strerror_r(-err, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -err); VMBUS_LOG(NOTICE, "no monitor_id in %s:%s", - subchan_path, strerror(-err)); + subchan_path, errmsg); goto fail; } diff --git a/drivers/bus/vmbus/vmbus_common.c b/drivers/bus/vmbus/vmbus_common.c index 8a965d10d9..017ead03e5 100644 --- a/drivers/bus/vmbus/vmbus_common.c +++ b/drivers/bus/vmbus/vmbus_common.c @@ -29,16 +29,18 @@ void * vmbus_map_resource(void *requested_addr, int fd, off_t offset, size_t size, int flags) { + char errmsg[RTE_STRERR_BUFSIZE]; void *mapaddr; /* Map the memory resource of device */ mapaddr = mmap(requested_addr, size, PROT_READ | PROT_WRITE, MAP_SHARED | flags, fd, offset); if (mapaddr == MAP_FAILED) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VMBUS_LOG(ERR, "mmap(%d, %p, %zu, %ld) failed: %s", - fd, requested_addr, size, (long)offset, - strerror(errno)); + fd, requested_addr, size, (long)offset, errmsg); } else { VMBUS_LOG(DEBUG, " VMBUS memory mapped at %p", mapaddr); @@ -50,14 +52,17 @@ vmbus_map_resource(void *requested_addr, int fd, off_t offset, size_t size, void vmbus_unmap_resource(void *requested_addr, size_t size) { + char errmsg[RTE_STRERR_BUFSIZE]; + if (requested_addr == NULL) return; /* Unmap the VMBUS memory resource of device */ if (munmap(requested_addr, size)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VMBUS_LOG(ERR, "munmap(%p, 0x%lx) failed: %s", - requested_addr, (unsigned long)size, - strerror(errno)); + requested_addr, (unsigned long)size, errmsg); } else { VMBUS_LOG(DEBUG, " VMBUS memory unmapped at %p", requested_addr); diff --git a/drivers/bus/vmbus/vmbus_common_uio.c b/drivers/bus/vmbus/vmbus_common_uio.c index 4d4613513c..d5f187c459 100644 --- a/drivers/bus/vmbus/vmbus_common_uio.c +++ b/drivers/bus/vmbus/vmbus_common_uio.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "private.h" @@ -43,6 +44,7 @@ static int vmbus_uio_map_secondary(struct rte_vmbus_device *dev) { struct mapped_vmbus_resource *uio_res; + char errmsg[RTE_STRERR_BUFSIZE]; struct vmbus_channel *chan; int fd, i; @@ -55,8 +57,9 @@ vmbus_uio_map_secondary(struct rte_vmbus_device *dev) /* open /dev/uioX */ fd = open(uio_res->path, O_RDWR); if (fd < 0) { - VMBUS_LOG(ERR, "Cannot open %s: %s", - uio_res->path, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + VMBUS_LOG(ERR, "Cannot open %s: %s", uio_res->path, errmsg); return -1; } From patchwork Mon Nov 4 11:10:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147920 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 5F5A245C76; Mon, 4 Nov 2024 12:12:23 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BF38B40EE2; Mon, 4 Nov 2024 12:10:59 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id 95BBF40659 for ; Mon, 4 Nov 2024 12:10:42 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.234]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4XhpdX3FWJz20rFM; Mon, 4 Nov 2024 19:09:36 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 37B9A1401F3; Mon, 4 Nov 2024 19:10:41 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:40 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 17/52] bus/vdev: use rte strerror Date: Mon, 4 Nov 2024 19:10:02 +0800 Message-ID: <20241104111037.3632161-18-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The rte_errno may be an RTE-specific error code, use rte_strerror() instead of strerror(). Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/bus/vdev/vdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c index ec7abe7cda..299f8c2873 100644 --- a/drivers/bus/vdev/vdev.c +++ b/drivers/bus/vdev/vdev.c @@ -437,7 +437,7 @@ vdev_action(const struct rte_mp_msg *mp_msg, const void *peer) strlcpy(ou->name, devname, RTE_DEV_NAME_MAX_LEN); if (rte_mp_sendmsg(&mp_resp) < 0) VDEV_LOG(ERR, "send vdev, %s, failed, %s", - devname, strerror(rte_errno)); + devname, rte_strerror(rte_errno)); num++; } rte_spinlock_recursive_unlock(&vdev_device_list_lock); From patchwork Mon Nov 4 11:10:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147955 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 EB02445C76; Mon, 4 Nov 2024 12:16:23 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 46AA442B71; Mon, 4 Nov 2024 12:11:43 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 514E140659 for ; Mon, 4 Nov 2024 12:10:44 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.252]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4XhpcZ5tGhzpXyM; Mon, 4 Nov 2024 19:08:46 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 5E8401800A7; Mon, 4 Nov 2024 19:10:41 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:41 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 18/52] common/cnxk: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:03 +0800 Message-ID: <20241104111037.3632161-19-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/common/cnxk/roc_dev.c | 12 ++++++++++-- drivers/common/cnxk/roc_model.c | 8 ++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/common/cnxk/roc_dev.c b/drivers/common/cnxk/roc_dev.c index 45f007325e..74c71036fe 100644 --- a/drivers/common/cnxk/roc_dev.c +++ b/drivers/common/cnxk/roc_dev.c @@ -8,6 +8,8 @@ #include #include +#include + #include "roc_api.h" #include "roc_priv.h" @@ -1303,6 +1305,7 @@ dev_vf_hwcap_update(struct plt_pci_device *pci_dev, struct dev *dev) static uintptr_t cn20k_pfvf_mbox_alloc(struct dev *dev, uint16_t max_vfs) { + char errmsg[RTE_STRERR_BUFSIZE]; char name[PLT_MEMZONE_NAMESIZE]; const struct plt_memzone *mz; uint32_t vf_mbox_region; @@ -1313,7 +1316,9 @@ cn20k_pfvf_mbox_alloc(struct dev *dev, uint16_t max_vfs) mz = plt_memzone_reserve_aligned(name, vf_mbox_region, 0, MBOX_SIZE); if (!mz) { - plt_err("Memory alloc failed: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + plt_err("Memory alloc failed: %s", errmsg); goto fail; } @@ -1397,6 +1402,7 @@ dev_setup_shared_lmt_region(struct mbox *mbox, bool valid_iova, uint64_t iova) static int dev_lmt_setup(struct dev *dev) { + char errmsg[RTE_STRERR_BUFSIZE]; char name[PLT_MEMZONE_NAMESIZE]; const struct plt_memzone *mz; struct idev_cfg *idev; @@ -1435,7 +1441,9 @@ dev_lmt_setup(struct dev *dev) */ mz = plt_lmt_region_reserve_aligned(name, LMT_REGION_SIZE, LMT_REGION_SIZE); if (!mz) { - plt_err("Memory alloc failed: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + plt_err("Memory alloc failed: %s", errmsg); goto fail; } diff --git a/drivers/common/cnxk/roc_model.c b/drivers/common/cnxk/roc_model.c index 6289461db4..63288e53ff 100644 --- a/drivers/common/cnxk/roc_model.c +++ b/drivers/common/cnxk/roc_model.c @@ -6,6 +6,8 @@ #include #include +#include + #include "roc_api.h" #include "roc_priv.h" @@ -149,6 +151,7 @@ static int cn10k_part_pass_get(uint32_t *part, uint32_t *pass) { #define SYSFS_PCI_DEVICES "/sys/bus/pci/devices" + char errmsg[RTE_STRERR_BUFSIZE]; char dirname[PATH_MAX]; struct dirent *e; int ret = -1; @@ -156,8 +159,9 @@ cn10k_part_pass_get(uint32_t *part, uint32_t *pass) dir = opendir(SYSFS_PCI_DEVICES); if (dir == NULL) { - plt_err("%s(): opendir failed: %s", __func__, - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + plt_err("%s(): opendir failed: %s", __func__, errmsg); return -errno; } From patchwork Mon Nov 4 11:10:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147919 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 A3A6345C76; Mon, 4 Nov 2024 12:12:16 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7FF7240ED6; Mon, 4 Nov 2024 12:10:58 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id AAADB40A79 for ; Mon, 4 Nov 2024 12:10:42 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.162.112]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcv08bfz2Fbsf; Mon, 4 Nov 2024 19:09:03 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 8A53A140120; Mon, 4 Nov 2024 19:10:41 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:41 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 19/52] common/mlx5: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:04 +0800 Message-ID: <20241104111037.3632161-20-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/common/mlx5/linux/mlx5_nl.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/common/mlx5/linux/mlx5_nl.c b/drivers/common/mlx5/linux/mlx5_nl.c index a5ac4dc543..67fc6c08d9 100644 --- a/drivers/common/mlx5/linux/mlx5_nl.c +++ b/drivers/common/mlx5/linux/mlx5_nl.c @@ -1924,18 +1924,21 @@ mlx5_nl_read_events(int nlsk_fd, mlx5_nl_event_cb *cb, void *cb_arg) .msg_iov = &iov, .msg_iovlen = 1, }; + char errmsg[RTE_STRERR_BUFSIZE]; struct nlmsghdr *hdr; ssize_t size; while (1) { size = recvmsg(nlsk_fd, &msg, MSG_DONTWAIT); if (size < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); if (errno == EAGAIN) return 0; if (errno == EINTR) continue; DRV_LOG(DEBUG, "Failed to receive netlink message: %s", - strerror(errno)); + errmsg); rte_errno = errno; return -rte_errno; } From patchwork Mon Nov 4 11:10:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147929 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 82BB845C76; Mon, 4 Nov 2024 12:13:18 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4CD414113D; Mon, 4 Nov 2024 12:11:10 +0100 (CET) Received: from szxga07-in.huawei.com (szxga07-in.huawei.com [45.249.212.35]) by mails.dpdk.org (Postfix) with ESMTP id C304140E2D for ; Mon, 4 Nov 2024 12:10:42 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.234]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4Xhpct4GbGz1SDxQ; Mon, 4 Nov 2024 19:09:02 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id ADC9E1401F3; Mon, 4 Nov 2024 19:10:41 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:41 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 20/52] common/mlx5: use rte strerror Date: Mon, 4 Nov 2024 19:10:05 +0800 Message-ID: <20241104111037.3632161-21-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The rte_errno may be an RTE-specific error code, use rte_strerror() instead of strerror(). Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/common/mlx5/linux/mlx5_nl.c | 10 +++++----- drivers/common/mlx5/mlx5_common.c | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/common/mlx5/linux/mlx5_nl.c b/drivers/common/mlx5/linux/mlx5_nl.c index 67fc6c08d9..165b793cc3 100644 --- a/drivers/common/mlx5/linux/mlx5_nl.c +++ b/drivers/common/mlx5/linux/mlx5_nl.c @@ -548,7 +548,7 @@ mlx5_nl_mac_addr_list(int nlsk_fd, unsigned int iface_idx, return 0; error: DRV_LOG(DEBUG, "Interface %u cannot retrieve MAC address list %s", - iface_idx, strerror(rte_errno)); + iface_idx, rte_strerror(rte_errno)); return -rte_errno; } @@ -618,7 +618,7 @@ mlx5_nl_mac_addr_modify(int nlsk_fd, unsigned int iface_idx, DRV_LOG(DEBUG, "Interface %u cannot %s MAC address %s %s", iface_idx, - add ? "add" : "remove", m, strerror(rte_errno)); + add ? "add" : "remove", m, rte_strerror(rte_errno)); } #endif return -rte_errno; @@ -705,7 +705,7 @@ mlx5_nl_vf_mac_addr_modify(int nlsk_fd, unsigned int iface_idx, RTE_ETHER_ADDR_PRT_FMT " : %s", vf_index, RTE_ETHER_ADDR_BYTES(mac), - strerror(rte_errno)); + rte_strerror(rte_errno)); return -rte_errno; } @@ -930,7 +930,7 @@ mlx5_nl_promisc(int nlsk_fd, unsigned int iface_idx, int enable) DRV_LOG(DEBUG, "Interface %u cannot %s promisc mode: Netlink error %s", iface_idx, enable ? "enable" : "disable", - strerror(rte_errno)); + rte_strerror(rte_errno)); return ret; } @@ -957,7 +957,7 @@ mlx5_nl_allmulti(int nlsk_fd, unsigned int iface_idx, int enable) DRV_LOG(DEBUG, "Interface %u cannot %s allmulti : Netlink error %s", iface_idx, enable ? "enable" : "disable", - strerror(rte_errno)); + rte_strerror(rte_errno)); return ret; } diff --git a/drivers/common/mlx5/mlx5_common.c b/drivers/common/mlx5/mlx5_common.c index ca8543e36e..7aafd0083d 100644 --- a/drivers/common/mlx5/mlx5_common.c +++ b/drivers/common/mlx5/mlx5_common.c @@ -762,7 +762,7 @@ mlx5_common_dev_create(struct rte_device *eal_dev, uint32_t classes, ret = mlx5_common_config_get(mkvlist, &cdev->config); if (ret < 0) { DRV_LOG(ERR, "Failed to process device arguments: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); rte_free(cdev); return NULL; } @@ -837,7 +837,7 @@ mlx5_common_probe_again_args_validate(struct mlx5_common_device *cdev, ret = mlx5_common_config_get(mkvlist, config); if (ret) { DRV_LOG(ERR, "Failed to process device configure: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); mlx5_free(config); return ret; } @@ -1011,7 +1011,7 @@ mlx5_common_dev_probe(struct rte_device *eal_dev) if (ret) { DRV_LOG(ERR, "Probe again parameters aren't compatible : %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); goto class_err; } } From patchwork Mon Nov 4 11:10:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147917 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 2422445C76; Mon, 4 Nov 2024 12:12:01 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2475F40ED2; Mon, 4 Nov 2024 12:10:56 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id D70E840E2E for ; Mon, 4 Nov 2024 12:10:42 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.194]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Xhpbn6bwszfdh7; Mon, 4 Nov 2024 19:08:05 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id D63811400F4; Mon, 4 Nov 2024 19:10:41 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:41 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 21/52] crypto/caam_jr: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:06 +0800 Message-ID: <20241104111037.3632161-22-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/crypto/caam_jr/caam_jr_uio.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/crypto/caam_jr/caam_jr_uio.c b/drivers/crypto/caam_jr/caam_jr_uio.c index 8956f7750d..13e982c9f4 100644 --- a/drivers/crypto/caam_jr/caam_jr_uio.c +++ b/drivers/crypto/caam_jr/caam_jr_uio.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -325,6 +326,7 @@ void free_job_ring(int uio_fd) { struct uio_job_ring *job_ring = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; int i; if (uio_fd == -1) @@ -353,9 +355,11 @@ free_job_ring(int uio_fd) /* Unmap the PCI memory resource of device */ if (munmap(job_ring->register_base_addr, job_ring->map_size)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CAAM_JR_INFO("cannot munmap(%p, 0x%lx): %s", job_ring->register_base_addr, - (unsigned long)job_ring->map_size, strerror(errno)); + (unsigned long)job_ring->map_size, errmsg); } else CAAM_JR_DEBUG("JR UIO memory is unmapped"); @@ -409,6 +413,7 @@ uio_job_ring *config_job_ring(void) int sec_configure(void) { + char errmsg[RTE_STRERR_BUFSIZE]; char uio_name[32]; int config_jr_no = 0, jr_id = -1; int uio_minor_number = -1; @@ -418,8 +423,10 @@ sec_configure(void) d = opendir(SEC_UIO_DEVICE_SYS_ATTR_PATH); if (d == NULL) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); CAAM_JR_ERR("Error opening directory '%s': %s", - SEC_UIO_DEVICE_SYS_ATTR_PATH, strerror(errno)); + SEC_UIO_DEVICE_SYS_ATTR_PATH, errmsg); return -1; } From patchwork Mon Nov 4 11:10:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147918 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 589EE45C76; Mon, 4 Nov 2024 12:12:09 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 34D9B40E72; Mon, 4 Nov 2024 12:10:57 +0100 (CET) Received: from szxga06-in.huawei.com (szxga06-in.huawei.com [45.249.212.32]) by mails.dpdk.org (Postfix) with ESMTP id 0875C40E28 for ; Mon, 4 Nov 2024 12:10:43 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.162.112]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4Xhpfz5Cgmz1ypCg; Mon, 4 Nov 2024 19:10:51 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 0AC95140120; Mon, 4 Nov 2024 19:10:42 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:41 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 22/52] dma/idxd: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:07 +0800 Message-ID: <20241104111037.3632161-23-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/dma/idxd/idxd_bus.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/drivers/dma/idxd/idxd_bus.c b/drivers/dma/idxd/idxd_bus.c index ba8076715d..78137f3531 100644 --- a/drivers/dma/idxd/idxd_bus.c +++ b/drivers/dma/idxd/idxd_bus.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "idxd_internal.h" @@ -136,6 +137,7 @@ static int read_wq_string(struct rte_dsa_device *dev, const char *filename, char *value, size_t valuelen) { + char errmsg[RTE_STRERR_BUFSIZE]; char sysfs_node[PATH_MAX]; int len; int fd; @@ -144,16 +146,20 @@ read_wq_string(struct rte_dsa_device *dev, const char *filename, dsa_get_sysfs_path(), dev->wq_name, filename); fd = open(sysfs_node, O_RDONLY); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); IDXD_PMD_ERR("%s(): opening file '%s' failed: %s", - __func__, sysfs_node, strerror(errno)); + __func__, sysfs_node, errmsg); return -1; } len = read(fd, value, valuelen - 1); close(fd); if (len < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); IDXD_PMD_ERR("%s(): error reading file '%s': %s", - __func__, sysfs_node, strerror(errno)); + __func__, sysfs_node, errmsg); return -1; } value[len] = '\0'; @@ -164,6 +170,7 @@ static int read_wq_int(struct rte_dsa_device *dev, const char *filename, int *value) { + char errmsg[RTE_STRERR_BUFSIZE]; char sysfs_node[PATH_MAX]; FILE *f; int ret = 0; @@ -172,14 +179,18 @@ read_wq_int(struct rte_dsa_device *dev, const char *filename, dsa_get_sysfs_path(), dev->wq_name, filename); f = fopen(sysfs_node, "r"); if (f == NULL) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); IDXD_PMD_ERR("%s(): opening file '%s' failed: %s", - __func__, sysfs_node, strerror(errno)); + __func__, sysfs_node, errmsg); return -1; } if (fscanf(f, "%d", value) != 1) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); IDXD_PMD_ERR("%s(): error reading file '%s': %s", - __func__, sysfs_node, strerror(errno)); + __func__, sysfs_node, errmsg); ret = -1; } @@ -191,6 +202,7 @@ static int read_device_int(struct rte_dsa_device *dev, const char *filename, int *value) { + char errmsg[RTE_STRERR_BUFSIZE]; char sysfs_node[PATH_MAX]; FILE *f; int ret = 0; @@ -199,14 +211,18 @@ read_device_int(struct rte_dsa_device *dev, const char *filename, dsa_get_sysfs_path(), dev->addr.device_id, filename); f = fopen(sysfs_node, "r"); if (f == NULL) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); IDXD_PMD_ERR("%s(): opening file '%s' failed: %s", - __func__, sysfs_node, strerror(errno)); + __func__, sysfs_node, errmsg); return -1; } if (fscanf(f, "%d", value) != 1) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); IDXD_PMD_ERR("%s(): error reading file '%s': %s", - __func__, sysfs_node, strerror(errno)); + __func__, sysfs_node, errmsg); ret = -1; } @@ -315,6 +331,7 @@ static int dsa_scan(void) { const char *path = dsa_get_dev_path(); + char errmsg[RTE_STRERR_BUFSIZE]; struct dirent *wq; DIR *dev_dir; @@ -322,8 +339,10 @@ dsa_scan(void) if (dev_dir == NULL) { if (errno == ENOENT) return 0; /* no bus, return without error */ + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); IDXD_PMD_ERR("%s(): opendir '%s' failed: %s", - __func__, path, strerror(errno)); + __func__, path, errmsg); return -1; } From patchwork Mon Nov 4 11:10:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147958 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 AAE1645C76; Mon, 4 Nov 2024 12:17:04 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D055240E3A; Mon, 4 Nov 2024 12:12:45 +0100 (CET) Received: from szxga07-in.huawei.com (szxga07-in.huawei.com [45.249.212.35]) by mails.dpdk.org (Postfix) with ESMTP id 5935140E2C for ; Mon, 4 Nov 2024 12:10:44 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.44]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcv3c0qz1SDxp; Mon, 4 Nov 2024 19:09:03 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 8E6691400D2; Mon, 4 Nov 2024 19:10:42 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:41 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 23/52] net/bnxt: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:08 +0800 Message-ID: <20241104111037.3632161-24-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li Acked-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_stats.c | 8 +- drivers/net/bnxt/rte_pmd_bnxt.c | 65 ++- drivers/net/bnxt/tf_core/tf_core.c | 509 +++++++++++++----- drivers/net/bnxt/tf_core/tf_em_common.c | 56 +- .../net/bnxt/tf_core/tf_em_hash_internal.c | 10 +- drivers/net/bnxt/tf_core/tf_em_host.c | 51 +- drivers/net/bnxt/tf_core/tf_em_internal.c | 32 +- drivers/net/bnxt/tf_core/tf_global_cfg.c | 23 +- drivers/net/bnxt/tf_core/tf_identifier.c | 20 +- drivers/net/bnxt/tf_core/tf_if_tbl.c | 15 +- drivers/net/bnxt/tf_core/tf_msg.c | 347 +++++++++--- drivers/net/bnxt/tf_core/tf_rm.c | 14 +- drivers/net/bnxt/tf_core/tf_session.c | 161 ++++-- drivers/net/bnxt/tf_core/tf_sram_mgr.c | 51 +- drivers/net/bnxt/tf_core/tf_tbl.c | 62 ++- drivers/net/bnxt/tf_core/tf_tbl_sram.c | 103 +++- drivers/net/bnxt/tf_core/tf_tcam.c | 53 +- 17 files changed, 1217 insertions(+), 363 deletions(-) diff --git a/drivers/net/bnxt/bnxt_stats.c b/drivers/net/bnxt/bnxt_stats.c index 5e59afe79f..07d38668f3 100644 --- a/drivers/net/bnxt/bnxt_stats.c +++ b/drivers/net/bnxt/bnxt_stats.c @@ -1172,6 +1172,7 @@ int bnxt_dev_xstats_get_names_op(struct rte_eth_dev *eth_dev, int bnxt_dev_xstats_reset_op(struct rte_eth_dev *eth_dev) { struct bnxt *bp = eth_dev->data->dev_private; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; ret = is_bnxt_in_error(bp); @@ -1185,9 +1186,12 @@ int bnxt_dev_xstats_reset_op(struct rte_eth_dev *eth_dev) } ret = bnxt_hwrm_port_clr_stats(bp); - if (ret != 0) + if (ret != 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); PMD_DRV_LOG_LINE(ERR, "Failed to reset xstats: %s", - strerror(-ret)); + errmsg); + } bnxt_clear_prev_stat(bp); diff --git a/drivers/net/bnxt/rte_pmd_bnxt.c b/drivers/net/bnxt/rte_pmd_bnxt.c index e9b5739050..1b388792a3 100644 --- a/drivers/net/bnxt/rte_pmd_bnxt.c +++ b/drivers/net/bnxt/rte_pmd_bnxt.c @@ -136,6 +136,7 @@ int rte_pmd_bnxt_set_vf_mac_addr(uint16_t port, uint16_t vf, { struct rte_eth_dev *dev; struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; struct bnxt *bp; int rc; @@ -147,9 +148,11 @@ int rte_pmd_bnxt_set_vf_mac_addr(uint16_t port, uint16_t vf, rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } @@ -176,6 +179,7 @@ int rte_pmd_bnxt_set_vf_rate_limit(uint16_t port, uint16_t vf, { struct rte_eth_dev *eth_dev; struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; struct bnxt *bp; uint32_t tot_rate = 0; uint64_t idx; @@ -189,9 +193,11 @@ int rte_pmd_bnxt_set_vf_rate_limit(uint16_t port, uint16_t vf, rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } @@ -231,6 +237,7 @@ int rte_pmd_bnxt_set_vf_rate_limit(uint16_t port, uint16_t vf, int rte_pmd_bnxt_set_vf_mac_anti_spoof(uint16_t port, uint16_t vf, uint8_t on) { struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_eth_dev *dev; uint32_t func_flags; struct bnxt *bp; @@ -247,9 +254,11 @@ int rte_pmd_bnxt_set_vf_mac_anti_spoof(uint16_t port, uint16_t vf, uint8_t on) rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } @@ -291,6 +300,7 @@ int rte_pmd_bnxt_set_vf_mac_anti_spoof(uint16_t port, uint16_t vf, uint8_t on) int rte_pmd_bnxt_set_vf_vlan_anti_spoof(uint16_t port, uint16_t vf, uint8_t on) { struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_eth_dev *dev; struct bnxt *bp; int rc; @@ -306,9 +316,11 @@ int rte_pmd_bnxt_set_vf_vlan_anti_spoof(uint16_t port, uint16_t vf, uint8_t on) rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } @@ -352,6 +364,7 @@ rte_pmd_bnxt_set_vf_vlan_stripq(uint16_t port, uint16_t vf, uint8_t on) { struct rte_eth_dev *dev; struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; struct bnxt *bp; int rc; @@ -363,9 +376,11 @@ rte_pmd_bnxt_set_vf_vlan_stripq(uint16_t port, uint16_t vf, uint8_t on) rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } @@ -395,6 +410,7 @@ int rte_pmd_bnxt_set_vf_rxmode(uint16_t port, uint16_t vf, { struct rte_eth_dev *dev; struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; uint16_t flag = 0; struct bnxt *bp; int rc; @@ -407,9 +423,11 @@ int rte_pmd_bnxt_set_vf_rxmode(uint16_t port, uint16_t vf, rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } @@ -589,6 +607,7 @@ int rte_pmd_bnxt_get_vf_stats(uint16_t port, { struct rte_eth_dev *dev; struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; struct bnxt *bp; int rc; @@ -598,9 +617,11 @@ int rte_pmd_bnxt_get_vf_stats(uint16_t port, rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } @@ -625,6 +646,7 @@ int rte_pmd_bnxt_reset_vf_stats(uint16_t port, { struct rte_eth_dev *dev; struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; struct bnxt *bp; int rc; @@ -634,9 +656,11 @@ int rte_pmd_bnxt_reset_vf_stats(uint16_t port, rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } @@ -659,6 +683,7 @@ int rte_pmd_bnxt_get_vf_rx_status(uint16_t port, uint16_t vf_id) { struct rte_eth_dev *dev; struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; struct bnxt *bp; int rc; @@ -668,9 +693,11 @@ int rte_pmd_bnxt_get_vf_rx_status(uint16_t port, uint16_t vf_id) rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } @@ -694,6 +721,7 @@ int rte_pmd_bnxt_get_vf_tx_drop_count(uint16_t port, uint16_t vf_id, { struct rte_eth_dev *dev; struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; struct bnxt *bp; int rc; @@ -703,9 +731,11 @@ int rte_pmd_bnxt_get_vf_tx_drop_count(uint16_t port, uint16_t vf_id, rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } @@ -734,6 +764,7 @@ int rte_pmd_bnxt_mac_addr_add(uint16_t port, struct rte_ether_addr *addr, struct bnxt_filter_info *filter; struct bnxt_vnic_info vnic; struct rte_ether_addr dflt_mac; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; dev = &rte_eth_devices[port]; @@ -742,9 +773,11 @@ int rte_pmd_bnxt_mac_addr_add(uint16_t port, struct rte_ether_addr *addr, rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } @@ -814,6 +847,7 @@ rte_pmd_bnxt_set_vf_vlan_insert(uint16_t port, uint16_t vf, { struct rte_eth_dev *dev; struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; struct bnxt *bp; int rc; @@ -825,9 +859,11 @@ rte_pmd_bnxt_set_vf_vlan_insert(uint16_t port, uint16_t vf, rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } @@ -856,6 +892,7 @@ rte_pmd_bnxt_set_vf_vlan_insert(uint16_t port, uint16_t vf, int rte_pmd_bnxt_set_vf_persist_stats(uint16_t port, uint16_t vf, uint8_t on) { struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_eth_dev *dev; uint32_t func_flags; struct bnxt *bp; @@ -869,9 +906,11 @@ int rte_pmd_bnxt_set_vf_persist_stats(uint16_t port, uint16_t vf, uint8_t on) dev = &rte_eth_devices[port]; rc = rte_eth_dev_info_get(port, &dev_info); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); PMD_DRV_LOG_LINE(ERR, "Error during getting device (port %u) info: %s", - port, strerror(-rc)); + port, errmsg); return rc; } diff --git a/drivers/net/bnxt/tf_core/tf_core.c b/drivers/net/bnxt/tf_core/tf_core.c index 3a812bee3a..18c8ea3ff0 100644 --- a/drivers/net/bnxt/tf_core/tf_core.c +++ b/drivers/net/bnxt/tf_core/tf_core.c @@ -193,6 +193,7 @@ tf_close_session(struct tf *tfp) int tf_insert_em_entry(struct tf *tfp, struct tf_insert_em_entry_parms *parms) { + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_session *tfs; struct tf_dev_info *dev; int rc; @@ -202,20 +203,24 @@ int tf_insert_em_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -229,10 +234,12 @@ int tf_insert_em_entry(struct tf *tfp, return -EINVAL; if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: EM insert failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -248,6 +255,7 @@ int tf_insert_em_entry(struct tf *tfp, int tf_delete_em_entry(struct tf *tfp, struct tf_delete_em_entry_parms *parms) { + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_session *tfs; struct tf_dev_info *dev; int rc; @@ -258,20 +266,24 @@ int tf_delete_em_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -282,10 +294,12 @@ int tf_delete_em_entry(struct tf *tfp, rc = dev->ops->tf_dev_delete_ext_em_entry(tfp, parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: EM delete failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -304,26 +318,31 @@ int tf_get_global_cfg(struct tf *tfp, int rc = 0; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -335,19 +354,23 @@ int tf_get_global_cfg(struct tf *tfp, if (dev->ops->tf_dev_get_global_cfg == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } rc = dev->ops->tf_dev_get_global_cfg(tfp, parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Global Cfg get failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -366,26 +389,31 @@ int tf_set_global_cfg(struct tf *tfp, int rc = 0; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -397,19 +425,23 @@ int tf_set_global_cfg(struct tf *tfp, if (dev->ops->tf_dev_set_global_cfg == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } rc = dev->ops->tf_dev_set_global_cfg(tfp, parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Global Cfg set failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -423,6 +455,7 @@ tf_alloc_identifier(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_ident_alloc_parms aparms; uint16_t id; @@ -434,29 +467,35 @@ tf_alloc_identifier(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } if (dev->ops->tf_dev_alloc_ident == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } @@ -465,10 +504,12 @@ tf_alloc_identifier(struct tf *tfp, aparms.id = &id; rc = dev->ops->tf_dev_alloc_ident(tfp, &aparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Identifier allocation failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -484,6 +525,7 @@ tf_free_identifier(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_ident_free_parms fparms; TF_CHECK_PARMS2(tfp, parms); @@ -494,29 +536,35 @@ tf_free_identifier(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } if (dev->ops->tf_dev_free_ident == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } @@ -526,10 +574,12 @@ tf_free_identifier(struct tf *tfp, fparms.ref_cnt = &parms->ref_cnt; rc = dev->ops->tf_dev_free_ident(tfp, &fparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Identifier free failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -543,6 +593,7 @@ tf_search_identifier(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_ident_search_parms sparms; TF_CHECK_PARMS2(tfp, parms); @@ -553,29 +604,35 @@ tf_search_identifier(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } if (dev->ops->tf_dev_search_ident == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -586,10 +643,12 @@ tf_search_identifier(struct tf *tfp, sparms.ref_cnt = &parms->ref_cnt; rc = dev->ops->tf_dev_search_ident(tfp, &sparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Identifier search failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -603,6 +662,7 @@ tf_search_tcam_entry(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tcam_alloc_search_parms sparms; TF_CHECK_PARMS2(tfp, parms); @@ -612,29 +672,35 @@ tf_search_tcam_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } if (dev->ops->tf_dev_alloc_search_tcam == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -653,10 +719,12 @@ tf_search_tcam_entry(struct tf *tfp, rc = dev->ops->tf_dev_alloc_search_tcam(tfp, &sparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: TCAM allocation failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -676,6 +744,7 @@ tf_alloc_tcam_entry(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tcam_alloc_parms aparms; TF_CHECK_PARMS2(tfp, parms); @@ -685,29 +754,35 @@ tf_alloc_tcam_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } if (dev->ops->tf_dev_alloc_tcam == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -717,10 +792,12 @@ tf_alloc_tcam_entry(struct tf *tfp, aparms.priority = parms->priority; rc = dev->ops->tf_dev_alloc_tcam(tfp, &aparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: TCAM allocation failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -736,6 +813,7 @@ tf_set_tcam_entry(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tcam_set_parms sparms; TF_CHECK_PARMS2(tfp, parms); @@ -745,30 +823,36 @@ tf_set_tcam_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } if (dev->ops->tf_dev_set_tcam == NULL || dev->ops->tf_dev_word_align == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -783,10 +867,12 @@ tf_set_tcam_entry(struct tf *tfp, rc = dev->ops->tf_dev_set_tcam(tfp, &sparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: TCAM set failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } TFP_DRV_LOG(DEBUG, @@ -804,6 +890,7 @@ tf_get_tcam_entry(struct tf *tfp __rte_unused, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tcam_get_parms gparms; TF_CHECK_PARMS2(tfp, parms); @@ -813,29 +900,35 @@ tf_get_tcam_entry(struct tf *tfp __rte_unused, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } if (dev->ops->tf_dev_get_tcam == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -850,10 +943,12 @@ tf_get_tcam_entry(struct tf *tfp __rte_unused, rc = dev->ops->tf_dev_get_tcam(tfp, &gparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: TCAM get failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } parms->key_sz_in_bits = gparms.key_size * 8; @@ -869,6 +964,7 @@ tf_free_tcam_entry(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tcam_free_parms fparms; TF_CHECK_PARMS2(tfp, parms); @@ -878,29 +974,35 @@ tf_free_tcam_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } if (dev->ops->tf_dev_free_tcam == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -909,10 +1011,12 @@ tf_free_tcam_entry(struct tf *tfp, fparms.idx = parms->idx; rc = dev->ops->tf_dev_free_tcam(tfp, &fparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: TCAM free failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -926,44 +1030,53 @@ tf_move_tcam_shared_entries(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } if (dev->ops->tf_dev_move_tcam == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } rc = dev->ops->tf_dev_move_tcam(tfp, parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: TCAM shared entries move failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -977,44 +1090,53 @@ tf_clear_tcam_shared_entries(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } if (dev->ops->tf_dev_clear_tcam == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } rc = dev->ops->tf_dev_clear_tcam(tfp, parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: TCAM shared entries clear failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1028,6 +1150,7 @@ tf_alloc_tbl_entry(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tbl_alloc_parms aparms; uint32_t idx; @@ -1039,20 +1162,24 @@ tf_alloc_tbl_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1064,37 +1191,45 @@ tf_alloc_tbl_entry(struct tf *tfp, if (parms->type == TF_TBL_TYPE_EXT) { if (dev->ops->tf_dev_alloc_ext_tbl == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } rc = dev->ops->tf_dev_alloc_ext_tbl(tfp, &aparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: External table allocation failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } } else if (dev->ops->tf_dev_is_sram_managed(tfp, parms->type)) { rc = dev->ops->tf_dev_alloc_sram_tbl(tfp, &aparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: SRAM table allocation failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } } else { rc = dev->ops->tf_dev_alloc_tbl(tfp, &aparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Table allocation failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } } @@ -1111,6 +1246,7 @@ tf_free_tbl_entry(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tbl_free_parms fparms; TF_CHECK_PARMS2(tfp, parms); @@ -1121,20 +1257,24 @@ tf_free_tbl_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1146,38 +1286,46 @@ tf_free_tbl_entry(struct tf *tfp, if (parms->type == TF_TBL_TYPE_EXT) { if (dev->ops->tf_dev_free_ext_tbl == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } rc = dev->ops->tf_dev_free_ext_tbl(tfp, &fparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Table free failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } } else if (dev->ops->tf_dev_is_sram_managed(tfp, parms->type)) { rc = dev->ops->tf_dev_free_sram_tbl(tfp, &fparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: SRAM table free failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } } else { rc = dev->ops->tf_dev_free_tbl(tfp, &fparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Table free failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } } @@ -1191,6 +1339,7 @@ tf_set_tbl_entry(struct tf *tfp, int rc = 0; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tbl_set_parms sparms; TF_CHECK_PARMS3(tfp, parms, parms->data); @@ -1201,20 +1350,24 @@ tf_set_tbl_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1228,46 +1381,56 @@ tf_set_tbl_entry(struct tf *tfp, if (parms->type == TF_TBL_TYPE_EXT) { if (dev->ops->tf_dev_set_ext_tbl == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } rc = dev->ops->tf_dev_set_ext_tbl(tfp, &sparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Table set failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } } else if (dev->ops->tf_dev_is_sram_managed(tfp, parms->type)) { rc = dev->ops->tf_dev_set_sram_tbl(tfp, &sparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: SRAM table set failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } } else { if (dev->ops->tf_dev_set_tbl == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } rc = dev->ops->tf_dev_set_tbl(tfp, &sparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Table set failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } } @@ -1282,6 +1445,7 @@ tf_get_tbl_entry(struct tf *tfp, int rc = 0; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tbl_get_parms gparms; TF_CHECK_PARMS3(tfp, parms, parms->data); @@ -1292,20 +1456,24 @@ tf_get_tbl_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } gparms.dir = parms->dir; @@ -1317,28 +1485,34 @@ tf_get_tbl_entry(struct tf *tfp, if (dev->ops->tf_dev_is_sram_managed(tfp, parms->type)) { rc = dev->ops->tf_dev_get_sram_tbl(tfp, &gparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: SRAM table get failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } } else { if (dev->ops->tf_dev_get_tbl == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } rc = dev->ops->tf_dev_get_tbl(tfp, &gparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Table get failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } } @@ -1353,6 +1527,7 @@ tf_bulk_get_tbl_entry(struct tf *tfp, int rc = 0; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tbl_get_bulk_parms bparms; TF_CHECK_PARMS2(tfp, parms); @@ -1363,20 +1538,24 @@ tf_bulk_get_tbl_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1390,38 +1569,46 @@ tf_bulk_get_tbl_entry(struct tf *tfp, if (parms->type == TF_TBL_TYPE_EXT) { /* Not supported, yet */ rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, External table type not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } else if (dev->ops->tf_dev_is_sram_managed(tfp, parms->type)) { rc = dev->ops->tf_dev_get_bulk_sram_tbl(tfp, &bparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: SRAM table bulk get failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); } return rc; } if (dev->ops->tf_dev_get_bulk_tbl == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } rc = dev->ops->tf_dev_get_bulk_tbl(tfp, &bparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Table get bulk failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } return rc; @@ -1433,26 +1620,31 @@ int tf_get_shared_tbl_increment(struct tf *tfp, int rc = 0; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1460,19 +1652,23 @@ int tf_get_shared_tbl_increment(struct tf *tfp, if (dev->ops->tf_dev_get_shared_tbl_increment == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } rc = dev->ops->tf_dev_get_shared_tbl_increment(tfp, parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Get table increment not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1485,6 +1681,7 @@ tf_alloc_tbl_scope(struct tf *tfp, { struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; TF_CHECK_PARMS2(tfp, parms); @@ -1492,18 +1689,22 @@ tf_alloc_tbl_scope(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -1523,6 +1724,7 @@ tf_map_tbl_scope(struct tf *tfp, { struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; TF_CHECK_PARMS2(tfp, parms); @@ -1530,18 +1732,22 @@ tf_map_tbl_scope(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -1562,6 +1768,7 @@ tf_free_tbl_scope(struct tf *tfp, { struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; TF_CHECK_PARMS2(tfp, parms); @@ -1569,18 +1776,22 @@ tf_free_tbl_scope(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -1602,6 +1813,7 @@ tf_set_if_tbl_entry(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_if_tbl_set_parms sparms = { 0 }; TF_CHECK_PARMS2(tfp, parms); @@ -1609,29 +1821,35 @@ tf_set_if_tbl_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } if (dev->ops->tf_dev_set_if_tbl == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1643,10 +1861,12 @@ tf_set_if_tbl_entry(struct tf *tfp, rc = dev->ops->tf_dev_set_if_tbl(tfp, &sparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: If_tbl set failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1660,6 +1880,7 @@ tf_get_if_tbl_entry(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_if_tbl_get_parms gparms = { 0 }; TF_CHECK_PARMS2(tfp, parms); @@ -1667,29 +1888,35 @@ tf_get_if_tbl_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } if (dev->ops->tf_dev_get_if_tbl == NULL) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); rc = -EOPNOTSUPP; TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1701,10 +1928,12 @@ tf_get_if_tbl_entry(struct tf *tfp, rc = dev->ops->tf_dev_get_if_tbl(tfp, &gparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: If_tbl get failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1717,24 +1946,29 @@ int tf_get_session_info(struct tf *tfp, int rc; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -1742,62 +1976,78 @@ int tf_get_session_info(struct tf *tfp, if (dev->ops->tf_dev_get_ident_resc_info == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Operation not supported, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = dev->ops->tf_dev_get_ident_resc_info(tfp, parms->session_info.ident); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Ident get resc info failed, rc:%s\n", - strerror(-rc)); + errmsg); } if (dev->ops->tf_dev_get_tbl_resc_info == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Operation not supported, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = dev->ops->tf_dev_get_tbl_resc_info(tfp, parms->session_info.tbl); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Tbl get resc info failed, rc:%s\n", - strerror(-rc)); + errmsg); } if (dev->ops->tf_dev_get_tcam_resc_info == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Operation not supported, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = dev->ops->tf_dev_get_tcam_resc_info(tfp, parms->session_info.tcam); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "TCAM get resc info failed, rc:%s\n", - strerror(-rc)); + errmsg); } if (dev->ops->tf_dev_get_em_resc_info == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Operation not supported, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = dev->ops->tf_dev_get_em_resc_info(tfp, parms->session_info.em); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "EM get resc info failed, rc:%s\n", - strerror(-rc)); + errmsg); } return 0; @@ -1839,6 +2089,7 @@ int tf_query_sram_resources(struct tf *tfp, struct tf_dev_info dev; uint16_t max_types; struct tfp_calloc_parms cparms; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_rm_resc_req_entry *query; enum tf_rm_resc_resv_strategy resv_strategy; @@ -1858,19 +2109,23 @@ int tf_query_sram_resources(struct tf *tfp, if (dev.ops->tf_dev_get_max_types == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } /* Need device max number of elements for the RM QCAPS */ rc = dev.ops->tf_dev_get_max_types(tfp, &max_types); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Get SRAM resc info failed, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -1898,10 +2153,12 @@ int tf_query_sram_resources(struct tf *tfp, if (dev.ops->tf_dev_get_sram_resources == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return -EOPNOTSUPP; } @@ -1909,9 +2166,11 @@ int tf_query_sram_resources(struct tf *tfp, parms->bank_resc_count, &parms->dynamic_sram_capable); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Get SRAM resc info failed, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -1923,6 +2182,7 @@ int tf_set_sram_policy(struct tf *tfp, { int rc = 0; struct tf_dev_info dev; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -1940,19 +2200,23 @@ int tf_set_sram_policy(struct tf *tfp, if (dev.ops->tf_dev_set_sram_policy == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } rc = dev.ops->tf_dev_set_sram_policy(parms->dir, parms->bank_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: SRAM policy set failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1964,6 +2228,7 @@ int tf_get_sram_policy(struct tf *tfp, { int rc = 0; struct tf_dev_info dev; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -1981,19 +2246,23 @@ int tf_get_sram_policy(struct tf *tfp, if (dev.ops->tf_dev_get_sram_policy == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } rc = dev.ops->tf_dev_get_sram_policy(parms->dir, parms->bank_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: SRAM policy get failed, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } diff --git a/drivers/net/bnxt/tf_core/tf_em_common.c b/drivers/net/bnxt/tf_core/tf_em_common.c index c518150d1f..2d5e32816c 100644 --- a/drivers/net/bnxt/tf_core/tf_em_common.c +++ b/drivers/net/bnxt/tf_core/tf_em_common.c @@ -43,6 +43,7 @@ tf_create_tbl_pool_external(enum tf_dir dir, uint32_t i; int32_t j; int rc = 0; + char errmsg[RTE_STRERR_BUFSIZE]; struct stack *pool = &tbl_scope_cb->ext_act_pool[dir]; parms.nitems = num_entries; @@ -50,8 +51,10 @@ tf_create_tbl_pool_external(enum tf_dir dir, parms.alignment = 0; if (tfp_calloc(&parms) != 0) { + if (strerror_r(ENOMEM, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ENOMEM); TFP_DRV_LOG(ERR, "%s: TBL: external pool failure %s\n", - tf_dir_2_str(dir), strerror(ENOMEM)); + tf_dir_2_str(dir), errmsg); return -ENOMEM; } @@ -60,8 +63,10 @@ tf_create_tbl_pool_external(enum tf_dir dir, rc = stack_init(num_entries, parms.mem_va, pool); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: TBL: stack init failure %s\n", - tf_dir_2_str(dir), strerror(-rc)); + tf_dir_2_str(dir), errmsg); goto cleanup; } @@ -77,8 +82,10 @@ tf_create_tbl_pool_external(enum tf_dir dir, for (i = 0; i < num_entries; i++) { rc = stack_push(pool, j); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s TBL: stack failure %s\n", - tf_dir_2_str(dir), strerror(-rc)); + tf_dir_2_str(dir), errmsg); goto cleanup; } @@ -92,8 +99,10 @@ tf_create_tbl_pool_external(enum tf_dir dir, if (!stack_is_full(pool)) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s TBL: stack failure %s\n", - tf_dir_2_str(dir), strerror(-rc)); + tf_dir_2_str(dir), errmsg); goto cleanup; } return 0; @@ -913,6 +922,7 @@ tf_em_ext_common_bind(struct tf *tfp, struct tf_rm_create_db_parms db_cfg = { 0 }; struct em_ext_db *ext_db; struct tfp_calloc_parms cparms; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -920,8 +930,10 @@ tf_em_ext_common_bind(struct tf *tfp, cparms.size = sizeof(struct em_ext_db); cparms.alignment = 0; if (tfp_calloc(&cparms) != 0) { + if (strerror_r(ENOMEM, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ENOMEM); TFP_DRV_LOG(ERR, "em_ext_db alloc error %s\n", - strerror(ENOMEM)); + errmsg); return -ENOMEM; } @@ -974,30 +986,37 @@ tf_em_ext_common_unbind(struct tf *tfp) struct tf_tbl_scope_cb *tbl_scope_cb = NULL; void *ext_ptr = NULL; struct tf_free_tbl_scope_parms tparms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS1(tfp); rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get tf_session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_em_ext_db(tfp, &ext_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -1129,6 +1148,7 @@ int tf_em_ext_map_tbl_scope(struct tf *tfp, { int rc = 0; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tbl_scope_cb *tbl_scope_cb; struct tf_global_cfg_parms gcfg_parms = { 0 }; struct tfp_calloc_parms aparms; @@ -1155,9 +1175,11 @@ int tf_em_ext_map_tbl_scope(struct tf *tfp, if (dev->ops->tf_dev_map_tbl_scope == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Map table scope operation not supported, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -1166,15 +1188,19 @@ int tf_em_ext_map_tbl_scope(struct tf *tfp, aparms.alignment = 0; if (tfp_calloc(&aparms) != 0) { + if (strerror_r(ENOMEM, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ENOMEM); TFP_DRV_LOG(ERR, "Map tbl scope alloc data error %s\n", - strerror(ENOMEM)); + errmsg); return -ENOMEM; } data = aparms.mem_va; if (tfp_calloc(&aparms) != 0) { + if (strerror_r(ENOMEM, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ENOMEM); TFP_DRV_LOG(ERR, "Map tbl scope alloc mask error %s\n", - strerror(ENOMEM)); + errmsg); rc = -ENOMEM; goto clean; } @@ -1186,9 +1212,11 @@ int tf_em_ext_map_tbl_scope(struct tf *tfp, sz_in_bytes); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Map table scope config failure, rc:%s\n", - strerror(-rc)); + errmsg); goto cleaner; } @@ -1201,9 +1229,11 @@ int tf_em_ext_map_tbl_scope(struct tf *tfp, rc = tf_msg_set_global_cfg(tfp, &gcfg_parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Map tbl scope, set failed, rc:%s\n", - strerror(-rc)); + errmsg); } cleaner: tfp_free(mask); diff --git a/drivers/net/bnxt/tf_core/tf_em_hash_internal.c b/drivers/net/bnxt/tf_core/tf_em_hash_internal.c index 9c527e152d..f18097a76b 100644 --- a/drivers/net/bnxt/tf_core/tf_em_hash_internal.c +++ b/drivers/net/bnxt/tf_core/tf_em_hash_internal.c @@ -124,13 +124,16 @@ tf_em_hash_delete_int_entry(struct tf *tfp, int rc = 0; struct tf_session *tfs; struct dpool *pool; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -158,14 +161,17 @@ tf_em_move_int_entry(struct tf *tfp, int rc = 0; struct dpool *pool; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } diff --git a/drivers/net/bnxt/tf_core/tf_em_host.c b/drivers/net/bnxt/tf_core/tf_em_host.c index 9efffe4ee5..1b31032fe8 100644 --- a/drivers/net/bnxt/tf_core/tf_em_host.c +++ b/drivers/net/bnxt/tf_core/tf_em_host.c @@ -168,6 +168,7 @@ static int tf_em_alloc_page_table(struct hcapi_cfa_em_table *tbl) { struct hcapi_cfa_em_page_tbl *tp; + char errmsg[RTE_STRERR_BUFSIZE]; int rc = 0; int i; uint32_t j; @@ -179,10 +180,12 @@ tf_em_alloc_page_table(struct hcapi_cfa_em_table *tbl) tbl->page_cnt[i], TF_EM_PAGE_SIZE); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(WARNING, "Failed to allocate page table: lvl: %d, rc:%s\n", i, - strerror(-rc)); + errmsg); goto cleanup; } @@ -365,6 +368,7 @@ tf_em_ext_alloc(struct tf *tfp, { int rc; enum tf_dir dir; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tbl_scope_cb *tbl_scope_cb; struct hcapi_cfa_em_table *em_tables; struct tf_free_tbl_scope_parms free_parms; @@ -378,25 +382,31 @@ tf_em_ext_alloc(struct tf *tfp, rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get tf_session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_em_ext_db(tfp, &ext_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } ext_db = (struct em_ext_db *)ext_ptr; rc = tfp_get_pf(tfp, &pf); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "EEM: PF query error rc:%s\n", - strerror(-rc)); + errmsg); goto cleanup; } @@ -417,10 +427,12 @@ tf_em_ext_alloc(struct tf *tfp, cparms.alignment = 0; rc = tfp_calloc(&cparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); /* Log error */ TFP_DRV_LOG(ERR, "Failed to allocate session table scope, rc:%s\n", - strerror(-rc)); + errmsg); goto cleanup; } @@ -433,10 +445,12 @@ tf_em_ext_alloc(struct tf *tfp, dir, &tbl_scope_cb->em_caps[dir]); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "EEM: Unable to query for EEM capability," " rc:%s\n", - strerror(-rc)); + errmsg); goto cleanup_ts; } } @@ -453,10 +467,12 @@ tf_em_ext_alloc(struct tf *tfp, */ rc = tf_em_ctx_reg(tfp, tbl_scope_cb, dir); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "EEM: Unable to register for EEM ctx," " rc:%s\n", - strerror(-rc)); + errmsg); goto cleanup_ts; } @@ -470,10 +486,12 @@ tf_em_ext_alloc(struct tf *tfp, parms->hw_flow_cache_flush_timer, dir); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "TBL: Unable to configure EEM in firmware" " rc:%s\n", - strerror(-rc)); + errmsg); goto cleanup_full; } @@ -482,10 +500,12 @@ tf_em_ext_alloc(struct tf *tfp, HWRM_TF_EXT_EM_OP_INPUT_OP_EXT_EM_ENABLE); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "EEM: Unable to enable EEM in firmware" " rc:%s\n", - strerror(-rc)); + errmsg); goto cleanup_full; } @@ -498,10 +518,12 @@ tf_em_ext_alloc(struct tf *tfp, em_tables[TF_RECORD_TABLE].num_entries, em_tables[TF_RECORD_TABLE].entry_size); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s TBL: Unable to allocate idx pools %s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); goto cleanup_full; } } @@ -538,6 +560,7 @@ tf_em_ext_free(struct tf *tfp, { int rc = 0; enum tf_dir dir; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tbl_scope_cb *tbl_scope_cb; struct tf_session *tfs; struct em_ext_db *ext_db = NULL; @@ -546,16 +569,20 @@ tf_em_ext_free(struct tf *tfp, rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get tf_session, rc:%s\n", - strerror(-rc)); + errmsg); return -EINVAL; } rc = tf_session_get_em_ext_db(tfp, &ext_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } ext_db = (struct em_ext_db *)ext_ptr; diff --git a/drivers/net/bnxt/tf_core/tf_em_internal.c b/drivers/net/bnxt/tf_core/tf_em_internal.c index 7f7a663789..0145c4778d 100644 --- a/drivers/net/bnxt/tf_core/tf_em_internal.c +++ b/drivers/net/bnxt/tf_core/tf_em_internal.c @@ -38,6 +38,7 @@ tf_em_insert_int_entry(struct tf *tfp, uint32_t gfid; uint16_t rptr_index = 0; uint8_t rptr_entry = 0; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t num_of_entries = 0; struct tf_session *tfs; struct dpool *pool; @@ -46,10 +47,12 @@ tf_em_insert_int_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -107,13 +110,16 @@ tf_em_delete_int_entry(struct tf *tfp, int rc = 0; struct tf_session *tfs; struct dpool *pool; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -136,6 +142,7 @@ tf_em_move_callback(void *user_data, int rc; struct tf *tfp = (struct tf *)user_data; struct tf_move_em_entry_parms parms; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_dev_info *dev; struct tf_session *tfs; @@ -150,20 +157,24 @@ tf_em_move_callback(void *user_data, /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(parms.dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(parms.dir), - strerror(-rc)); + errmsg); return rc; } @@ -184,6 +195,7 @@ tf_em_int_bind(struct tf *tfp, int i; struct tf_rm_create_db_parms db_cfg = { 0 }; struct tf_rm_get_alloc_info_parms iparms; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_rm_alloc_info info; struct em_rm_db *em_db; struct tfp_calloc_parms cparms; @@ -201,8 +213,10 @@ tf_em_int_bind(struct tf *tfp, cparms.size = sizeof(struct em_rm_db); cparms.alignment = 0; if (tfp_calloc(&cparms) != 0) { + if (strerror_r(ENOMEM, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ENOMEM); TFP_DRV_LOG(ERR, "em_rm_db alloc error %s\n", - strerror(ENOMEM)); + errmsg); return -ENOMEM; } @@ -228,11 +242,13 @@ tf_em_int_bind(struct tf *tfp, if (db_cfg.alloc_cnt[TF_EM_TBL_TYPE_EM_RECORD] % TF_SESSION_EM_ENTRY_SIZE != 0) { rc = -ENOMEM; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, EM Allocation must be in blocks of %d, failure %s\n", tf_dir_2_str(i), TF_SESSION_EM_ENTRY_SIZE, - strerror(-rc)); + errmsg); return rc; } @@ -275,10 +291,12 @@ tf_em_int_bind(struct tf *tfp, rc = tfp_calloc(&cparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, EM stack allocation failure %s\n", tf_dir_2_str(i), - strerror(-rc)); + errmsg); return rc; } diff --git a/drivers/net/bnxt/tf_core/tf_global_cfg.c b/drivers/net/bnxt/tf_core/tf_global_cfg.c index 3a8030a2fb..356165de89 100644 --- a/drivers/net/bnxt/tf_core/tf_global_cfg.c +++ b/drivers/net/bnxt/tf_core/tf_global_cfg.c @@ -74,6 +74,7 @@ tf_global_cfg_bind(struct tf *tfp, struct tf_global_cfg_cfg_parms *parms) { struct tfp_calloc_parms cparms; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_global_cfg_db *global_cfg_db; TF_CHECK_PARMS2(tfp, parms); @@ -82,8 +83,10 @@ tf_global_cfg_bind(struct tf *tfp, cparms.size = sizeof(struct tf_global_cfg_db); cparms.alignment = 0; if (tfp_calloc(&cparms) != 0) { + if (strerror_r(ENOMEM, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ENOMEM); TFP_DRV_LOG(ERR, "global_rm_db alloc error %s\n", - strerror(ENOMEM)); + errmsg); return -ENOMEM; } @@ -121,6 +124,7 @@ tf_global_cfg_set(struct tf *tfp, int rc; struct tf_global_cfg_get_hcapi_parms hparms; struct tf_global_cfg_db *global_cfg_db_ptr; + char errmsg[RTE_STRERR_BUFSIZE]; uint16_t hcapi_type; TF_CHECK_PARMS3(tfp, parms, parms->config); @@ -137,21 +141,25 @@ tf_global_cfg_set(struct tf *tfp, hparms.hcapi_type = &hcapi_type; rc = tf_global_cfg_get_hcapi_type(&hparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Failed type lookup, type:%d, rc:%s\n", tf_dir_2_str(parms->dir), parms->type, - strerror(-rc)); + errmsg); return rc; } rc = tf_msg_set_global_cfg(tfp, parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Set failed, type:%d, rc:%s\n", tf_dir_2_str(parms->dir), parms->type, - strerror(-rc)); + errmsg); } return 0; @@ -165,6 +173,7 @@ tf_global_cfg_get(struct tf *tfp, int rc; struct tf_global_cfg_get_hcapi_parms hparms; struct tf_global_cfg_db *global_cfg_db_ptr; + char errmsg[RTE_STRERR_BUFSIZE]; uint16_t hcapi_type; TF_CHECK_PARMS3(tfp, parms, parms->config); @@ -181,22 +190,26 @@ tf_global_cfg_get(struct tf *tfp, hparms.hcapi_type = &hcapi_type; rc = tf_global_cfg_get_hcapi_type(&hparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Failed type lookup, type:%d, rc:%s\n", tf_dir_2_str(parms->dir), parms->type, - strerror(-rc)); + errmsg); return rc; } /* Get the entry */ rc = tf_msg_get_global_cfg(tfp, parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Get failed, type:%d, rc:%s\n", tf_dir_2_str(parms->dir), parms->type, - strerror(-rc)); + errmsg); } return 0; diff --git a/drivers/net/bnxt/tf_core/tf_identifier.c b/drivers/net/bnxt/tf_core/tf_identifier.c index 7d9d9595dd..b89d9c0da0 100644 --- a/drivers/net/bnxt/tf_core/tf_identifier.c +++ b/drivers/net/bnxt/tf_core/tf_identifier.c @@ -24,6 +24,7 @@ tf_ident_bind(struct tf *tfp, struct tf_rm_create_db_parms db_cfg = { 0 }; struct ident_rm_db *ident_db; struct tfp_calloc_parms cparms; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_session *tfs; TF_CHECK_PARMS2(tfp, parms); @@ -38,8 +39,10 @@ tf_ident_bind(struct tf *tfp, cparms.size = sizeof(struct ident_rm_db); cparms.alignment = 0; if (tfp_calloc(&cparms) != 0) { + if (strerror_r(ENOMEM, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ENOMEM); TFP_DRV_LOG(ERR, "ident_rm_db alloc error %s\n", - strerror(ENOMEM)); + rte_strerror(ENOMEM)); return -ENOMEM; } @@ -114,6 +117,7 @@ tf_ident_alloc(struct tf *tfp __rte_unused, int rc; uint32_t id; uint32_t base_id; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_rm_allocate_parms aparms = { 0 }; struct ident_rm_db *ident_db; void *ident_db_ptr = NULL; @@ -122,9 +126,11 @@ tf_ident_alloc(struct tf *tfp __rte_unused, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_IDENTIFIER, &ident_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get ident_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } ident_db = (struct ident_rm_db *)ident_db_ptr; @@ -153,6 +159,7 @@ tf_ident_free(struct tf *tfp __rte_unused, int rc; struct tf_rm_is_allocated_parms aparms = { 0 }; struct tf_rm_free_parms fparms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; int allocated = 0; uint32_t base_id; struct ident_rm_db *ident_db; @@ -162,9 +169,11 @@ tf_ident_free(struct tf *tfp __rte_unused, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_IDENTIFIER, &ident_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get ident_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } ident_db = (struct ident_rm_db *)ident_db_ptr; @@ -211,6 +220,7 @@ tf_ident_search(struct tf *tfp __rte_unused, { int rc; struct tf_rm_is_allocated_parms aparms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; int allocated = 0; uint32_t base_id; struct ident_rm_db *ident_db; @@ -220,9 +230,11 @@ tf_ident_search(struct tf *tfp __rte_unused, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_IDENTIFIER, &ident_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get ident_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } ident_db = (struct ident_rm_db *)ident_db_ptr; diff --git a/drivers/net/bnxt/tf_core/tf_if_tbl.c b/drivers/net/bnxt/tf_core/tf_if_tbl.c index 578d361417..cbbade789e 100644 --- a/drivers/net/bnxt/tf_core/tf_if_tbl.c +++ b/drivers/net/bnxt/tf_core/tf_if_tbl.c @@ -57,6 +57,7 @@ tf_if_tbl_bind(struct tf *tfp, { struct tfp_calloc_parms cparms; struct tf_if_tbl_db *if_tbl_db; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -64,8 +65,10 @@ tf_if_tbl_bind(struct tf *tfp, cparms.size = sizeof(struct tf_if_tbl_db); cparms.alignment = 0; if (tfp_calloc(&cparms) != 0) { + if (strerror_r(ENOMEM, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ENOMEM); TFP_DRV_LOG(ERR, "if_tbl_rm_db alloc error %s\n", - strerror(ENOMEM)); + errmsg); return -ENOMEM; } @@ -111,6 +114,7 @@ tf_if_tbl_set(struct tf *tfp, struct tf_if_tbl_set_parms *parms) { int rc; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_if_tbl_db *if_tbl_db_ptr = NULL; struct tf_if_tbl_get_hcapi_parms hparms; @@ -139,11 +143,13 @@ tf_if_tbl_set(struct tf *tfp, rc = tf_msg_set_if_tbl_entry(tfp, parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, If Tbl set failed, type:%d, rc:%s\n", tf_dir_2_str(parms->dir), parms->type, - strerror(-rc)); + errmsg); } return 0; @@ -154,6 +160,7 @@ tf_if_tbl_get(struct tf *tfp, struct tf_if_tbl_get_parms *parms) { int rc = 0; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_if_tbl_db *if_tbl_db_ptr = NULL; struct tf_if_tbl_get_hcapi_parms hparms; @@ -183,11 +190,13 @@ tf_if_tbl_get(struct tf *tfp, /* Get the entry */ rc = tf_msg_get_if_tbl_entry(tfp, parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, If Tbl get failed, type:%d, rc:%s\n", tf_dir_2_str(parms->dir), parms->type, - strerror(-rc)); + errmsg); } return 0; diff --git a/drivers/net/bnxt/tf_core/tf_msg.c b/drivers/net/bnxt/tf_core/tf_msg.c index 1c66c7e01a..9793918519 100644 --- a/drivers/net/bnxt/tf_core/tf_msg.c +++ b/drivers/net/bnxt/tf_core/tf_msg.c @@ -205,6 +205,7 @@ tf_msg_session_client_register(struct tf *tfp, struct hwrm_tf_session_register_input req = { 0 }; struct hwrm_tf_session_register_output resp = { 0 }; struct tfp_send_msg_parms parms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t fw_session_id; struct tf_dev_info *dev; char *session_name; @@ -214,17 +215,21 @@ tf_msg_session_client_register(struct tf *tfp, /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Unable to lookup FW id, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -283,23 +288,28 @@ tf_msg_session_client_unregister(struct tf *tfp, struct hwrm_tf_session_unregister_input req = { 0 }; struct hwrm_tf_session_unregister_output resp = { 0 }; struct tfp_send_msg_parms parms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t fw_session_id; struct tf_dev_info *dev; /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Unable to lookup FW id, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -352,6 +362,7 @@ tf_msg_session_qcfg(struct tf *tfp) struct hwrm_tf_session_qcfg_input req = { 0 }; struct hwrm_tf_session_qcfg_output resp = { 0 }; struct tfp_send_msg_parms parms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t fw_session_id; struct tf_dev_info *dev; struct tf_session *tfs; @@ -359,26 +370,32 @@ tf_msg_session_qcfg(struct tf *tfp) /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Unable to lookup FW id, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -413,6 +430,7 @@ tf_msg_session_resc_qcaps(struct tf *tfp, struct hwrm_tf_session_resc_qcaps_output resp = { 0 }; struct tf_msg_dma_buf qcaps_buf = { 0 }; struct tf_rm_resc_req_entry *data; + char errmsg[RTE_STRERR_BUFSIZE]; int dma_size; TF_CHECK_PARMS3(tfp, query, resv_strategy); @@ -444,10 +462,12 @@ tf_msg_session_resc_qcaps(struct tf *tfp, * Should always get expected number of entries */ if (tfp_le_to_cpu_32(resp.size) != size) { + if (strerror_r(EINVAL, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", EINVAL); TFP_DRV_LOG(WARNING, "%s: QCAPS message size error, rc:%s, request %d vs response %d\n", tf_dir_2_str(dir), - strerror(EINVAL), + errmsg, size, resp.size); } @@ -490,15 +510,18 @@ tf_msg_session_resc_alloc(struct tf *tfp, struct tf_msg_dma_buf resv_buf = { 0 }; struct tf_rm_resc_req_entry *req_data; struct tf_rm_resc_entry *resv_data; + char errmsg[RTE_STRERR_BUFSIZE]; int dma_size; struct tf_session *tfs; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -506,10 +529,12 @@ tf_msg_session_resc_alloc(struct tf *tfp, rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } @@ -556,10 +581,12 @@ tf_msg_session_resc_alloc(struct tf *tfp, * Should always get expected number of entries */ if (tfp_le_to_cpu_32(resp.size) != size) { + if (strerror_r(EINVAL, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", EINVAL); TFP_DRV_LOG(ERR, "%s: Alloc message size error, rc:%s\n", tf_dir_2_str(dir), - strerror(EINVAL)); + errmsg); rc = -EINVAL; goto cleanup; } @@ -597,15 +624,18 @@ tf_msg_session_resc_info(struct tf *tfp, struct tf_msg_dma_buf resv_buf = { 0 }; struct tf_rm_resc_req_entry *req_data; struct tf_rm_resc_entry *resv_data; + char errmsg[RTE_STRERR_BUFSIZE]; int dma_size; struct tf_session *tfs; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -613,10 +643,12 @@ tf_msg_session_resc_info(struct tf *tfp, rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } @@ -663,10 +695,12 @@ tf_msg_session_resc_info(struct tf *tfp, * Should always get expected number of entries */ if (tfp_le_to_cpu_32(resp.size) != size) { + if (strerror_r(EINVAL, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", EINVAL); TFP_DRV_LOG(ERR, "%s: Alloc message size error, rc:%s\n", tf_dir_2_str(dir), - strerror(EINVAL)); + errmsg); rc = -EINVAL; goto cleanup; } @@ -703,16 +737,19 @@ tf_msg_session_resc_flush(struct tf *tfp, int dma_size; struct tf_dev_info *dev; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, resv); /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } @@ -722,16 +759,18 @@ tf_msg_session_resc_flush(struct tf *tfp, TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } @@ -787,6 +826,7 @@ tf_msg_insert_em_internal_entry(struct tf *tfp, uint8_t msg_key_size; struct tf_dev_info *dev; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; RTE_BUILD_BUG_ON(sizeof(struct hwrm_tf_em_insert_input) != TF_MSG_SIZE_HWRM_TF_EM_INSERT); @@ -794,29 +834,35 @@ tf_msg_insert_em_internal_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -827,10 +873,12 @@ tf_msg_insert_em_internal_entry(struct tf *tfp, msg_key_size = (em_parms->key_sz_in_bits + 7) / 8; if (msg_key_size > TF_MSG_EM_INSERT_KEY_SIZE) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Invalid parameters for msg type, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -886,33 +934,40 @@ tf_msg_hash_insert_em_internal_entry(struct tf *tfp, uint8_t msg_record_size; struct tf_dev_info *dev; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -924,10 +979,12 @@ tf_msg_hash_insert_em_internal_entry(struct tf *tfp, if (msg_record_size > TF_MSG_EM_INSERT_RECORD_SIZE) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Record size to large, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -975,33 +1032,40 @@ tf_msg_delete_em_entry(struct tf *tfp, uint8_t fw_session_id; struct tf_dev_info *dev; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1043,33 +1107,40 @@ tf_msg_move_em_entry(struct tf *tfp, uint8_t fw_session_id; struct tf_dev_info *dev; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(em_parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1114,22 +1185,27 @@ int tf_msg_ext_em_ctxt_mem_alloc(struct tf *tfp, struct tf_dev_info *dev; struct tf_session *tfs; uint32_t fw_se_id; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the session information */ @@ -1148,8 +1224,10 @@ int tf_msg_ext_em_ctxt_mem_alloc(struct tf *tfp, parms.mailbox = dev->ops->tf_dev_get_mailbox(); rc = tfp_send_msg_direct(tf_session_get_bp(tfp), &parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed ext_em_alloc error rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -1174,22 +1252,27 @@ int tf_msg_ext_em_ctxt_mem_free(struct tf *tfp, struct tf_dev_info *dev; struct tf_session *tfs; uint32_t fw_se_id; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the session information */ @@ -1222,6 +1305,7 @@ tf_msg_em_mem_rgtr(struct tf *tfp, struct hwrm_tf_ctxt_mem_rgtr_input req = { 0 }; struct hwrm_tf_ctxt_mem_rgtr_output resp = { 0 }; struct tfp_send_msg_parms parms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_dev_info *dev; struct tf_session *tfs; uint32_t fw_se_id; @@ -1229,18 +1313,22 @@ tf_msg_em_mem_rgtr(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } fw_se_id = tfs->session_id.internal.fw_session_id; @@ -1275,6 +1363,7 @@ tf_msg_em_mem_unrgtr(struct tf *tfp, struct hwrm_tf_ctxt_mem_unrgtr_input req = {0}; struct hwrm_tf_ctxt_mem_unrgtr_output resp = {0}; struct tfp_send_msg_parms parms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_dev_info *dev; struct tf_session *tfs; uint32_t fw_se_id; @@ -1282,18 +1371,22 @@ tf_msg_em_mem_unrgtr(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -1324,6 +1417,7 @@ tf_msg_em_qcaps(struct tf *tfp, struct hwrm_tf_ext_em_qcaps_output resp = { 0 }; uint32_t flags; struct tfp_send_msg_parms parms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_dev_info *dev; struct tf_session *tfs; uint32_t fw_se_id; @@ -1331,10 +1425,12 @@ tf_msg_em_qcaps(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } fw_se_id = tfs->session_id.internal.fw_session_id; @@ -1342,10 +1438,12 @@ tf_msg_em_qcaps(struct tf *tfp, /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } @@ -1392,26 +1490,31 @@ tf_msg_em_cfg(struct tf *tfp, struct hwrm_tf_ext_em_cfg_output resp = {0}; uint32_t flags; struct tfp_send_msg_parms parms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_dev_info *dev; struct tf_session *tfs; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } @@ -1453,6 +1556,7 @@ tf_msg_ext_em_cfg(struct tf *tfp, struct hwrm_tf_ext_em_cfg_input req = {0}; struct hwrm_tf_ext_em_cfg_output resp = {0}; struct tfp_send_msg_parms parms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; uint32_t flags; struct tf_dev_info *dev; struct tf_session *tfs; @@ -1462,20 +1566,24 @@ tf_msg_ext_em_cfg(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } fw_se_id = tfs->session_id.internal.fw_session_id; @@ -1527,24 +1635,29 @@ tf_msg_em_op(struct tf *tfp, struct tfp_send_msg_parms parms = { 0 }; struct tf_dev_info *dev; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } @@ -1575,6 +1688,7 @@ tf_msg_tcam_entry_set(struct tf *tfp, struct hwrm_tf_tcam_set_input req = { 0 }; struct hwrm_tf_tcam_set_output resp = { 0 }; struct tf_msg_dma_buf buf = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t *data = NULL; int data_size = 0; uint8_t fw_session_id; @@ -1583,18 +1697,22 @@ tf_msg_tcam_entry_set(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1656,24 +1774,29 @@ tf_msg_tcam_entry_get(struct tf *tfp, struct tfp_send_msg_parms mparms = { 0 }; struct hwrm_tf_tcam_get_input req = { 0 }; struct hwrm_tf_tcam_get_output resp = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t fw_session_id; struct tf_session *tfs; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1700,12 +1823,14 @@ tf_msg_tcam_entry_get(struct tf *tfp, if (parms->key_size < resp.key_size || parms->result_size < resp.result_size) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Key buffer(%d) is smaller than the key(%d), rc:%s\n", tf_dir_2_str(parms->dir), parms->key_size, resp.key_size, - strerror(-rc)); + errmsg); return rc; } parms->key_size = resp.key_size; @@ -1726,6 +1851,7 @@ tf_msg_tcam_entry_free(struct tf *tfp, struct hwrm_tf_tcam_free_input req = { 0 }; struct hwrm_tf_tcam_free_output resp = { 0 }; struct tfp_send_msg_parms parms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t fw_session_id; struct tf_session *tfs; @@ -1734,16 +1860,18 @@ tf_msg_tcam_entry_free(struct tf *tfp, if (rc) { TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(in_parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1780,6 +1908,7 @@ tf_msg_set_tbl_entry(struct tf *tfp, struct hwrm_tf_tbl_type_set_output resp = { 0 }; struct tfp_send_msg_parms parms = { 0 }; struct tf_msg_dma_buf buf = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t fw_session_id; struct tf_dev_info *dev; struct tf_session *tfs; @@ -1790,29 +1919,35 @@ tf_msg_set_tbl_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } @@ -1866,6 +2001,7 @@ tf_msg_get_tbl_entry(struct tf *tfp, struct hwrm_tf_tbl_type_get_input req = { 0 }; struct hwrm_tf_tbl_type_get_output resp = { 0 }; struct tfp_send_msg_parms parms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t fw_session_id; struct tf_dev_info *dev; struct tf_session *tfs; @@ -1874,29 +2010,35 @@ tf_msg_get_tbl_entry(struct tf *tfp, /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } flags = (dir == TF_DIR_TX ? @@ -1957,33 +2099,40 @@ tf_msg_get_global_cfg(struct tf *tfp, uint16_t resp_size = 0; struct tf_dev_info *dev; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(params->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(params->dir), - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(params->dir), - strerror(-rc)); + errmsg); return rc; } @@ -2036,33 +2185,40 @@ tf_msg_set_global_cfg(struct tf *tfp, uint8_t fw_session_id; struct tf_dev_info *dev; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(params->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(params->dir), - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(params->dir), - strerror(-rc)); + errmsg); return rc; } @@ -2079,10 +2235,12 @@ tf_msg_set_global_cfg(struct tf *tfp, /* Check for data size conformity */ if (params->config_sz_in_bytes > TF_MSG_SET_GLOBAL_CFG_DATA_SIZE) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Invalid parameters for msg type, rc:%s\n", tf_dir_2_str(params->dir), - strerror(-rc)); + errmsg); return rc; } @@ -2133,33 +2291,40 @@ tf_msg_bulk_get_tbl_entry(struct tf *tfp, struct tf_dev_info *dev; struct tf_session *tfs; uint32_t flags = 0; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Unable to lookup FW id, rc:%s\n", tf_dir_2_str(dir), - strerror(-rc)); + errmsg); return rc; } flags = (dir == TF_DIR_TX ? @@ -2210,24 +2375,29 @@ tf_msg_get_if_tbl_entry(struct tf *tfp, uint32_t flags = 0; struct tf_dev_info *dev; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(params->dir), - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup device, rc:%s\n", tf_dir_2_str(params->dir), - strerror(-rc)); + errmsg); return rc; } @@ -2271,14 +2441,17 @@ tf_msg_set_if_tbl_entry(struct tf *tfp, uint32_t flags = 0; struct tf_dev_info *dev; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to lookup session, rc:%s\n", tf_dir_2_str(params->dir), - strerror(-rc)); + errmsg); return rc; } @@ -2360,30 +2533,37 @@ tf_msg_session_set_hotup_state(struct tf *tfp, uint16_t state) uint8_t fw_session_id; struct tf_dev_info *dev; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Unable to lookup FW id, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -2415,30 +2595,37 @@ tf_msg_session_get_hotup_state(struct tf *tfp, uint8_t fw_session_id; struct tf_dev_info *dev; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } /* Retrieve the device information */ rc = tf_session_get_device(tfs, &dev); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup device, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Unable to lookup FW id, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } diff --git a/drivers/net/bnxt/tf_core/tf_rm.c b/drivers/net/bnxt/tf_core/tf_rm.c index 9b85f5397d..8d6ef5277c 100644 --- a/drivers/net/bnxt/tf_core/tf_rm.c +++ b/drivers/net/bnxt/tf_core/tf_rm.c @@ -1045,6 +1045,7 @@ tf_rm_get_pool(struct tf_rm_new_db *rm_db, { int rc = 0; uint16_t tmp_subtype = subtype; + char errmsg[RTE_STRERR_BUFSIZE]; /* If we are a child, get the parent table index */ if (rm_db->db[subtype].cfg_type == TF_RM_ELEM_CFG_HCAPI_BA_CHILD) @@ -1055,11 +1056,13 @@ tf_rm_get_pool(struct tf_rm_new_db *rm_db, /* Bail out if the pool is not valid, should never happen */ if (rm_db->db[tmp_subtype].pool == NULL) { rc = -ENOTSUP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Invalid pool for this type:%d, rc:%s\n", tf_dir_2_str(rm_db->dir), tmp_subtype, - strerror(-rc)); + errmsg); return rc; } *new_subtype = tmp_subtype; @@ -1073,6 +1076,7 @@ tf_rm_allocate(struct tf_rm_allocate_parms *parms) int id; uint32_t index; struct tf_rm_new_db *rm_db; + char errmsg[RTE_STRERR_BUFSIZE]; enum tf_rm_elem_cfg_type cfg_type; struct bitalloc *pool; uint16_t subtype; @@ -1103,10 +1107,12 @@ tf_rm_allocate(struct tf_rm_allocate_parms *parms) id = ba_alloc(pool); if (id == BA_FAIL) { rc = -ENOMEM; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Allocation failed, rc:%s\n", tf_dir_2_str(rm_db->dir), - strerror(-rc)); + errmsg); return rc; } @@ -1117,10 +1123,12 @@ tf_rm_allocate(struct tf_rm_allocate_parms *parms) id, &index); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Alloc adjust of base index failed, rc:%s\n", tf_dir_2_str(rm_db->dir), - strerror(-rc)); + errmsg); return -EINVAL; } diff --git a/drivers/net/bnxt/tf_core/tf_session.c b/drivers/net/bnxt/tf_core/tf_session.c index 253d716572..bd047643cf 100644 --- a/drivers/net/bnxt/tf_core/tf_session.c +++ b/drivers/net/bnxt/tf_core/tf_session.c @@ -60,6 +60,7 @@ tf_session_create(struct tf *tfp, char *shared_name; char *tcam_session_name; char *pool_session_name; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -75,14 +76,19 @@ tf_session_create(struct tf *tfp, &shared_session_creator); if (rc) { /* Log error */ - if (rc == -EEXIST) + if (rc == -EEXIST) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Session is already open, rc:%s\n", - strerror(-rc)); - else + errmsg); + } else { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Open message send failed, rc:%s\n", - strerror(-rc)); + errmsg); + } parms->open_cfg->session_id.id = TF_FW_SESSION_ID_INVALID; return rc; @@ -94,10 +100,12 @@ tf_session_create(struct tf *tfp, cparms.alignment = 0; rc = tfp_calloc(&cparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); /* Log error */ TFP_DRV_LOG(ERR, "Failed to allocate session info, rc:%s\n", - strerror(-rc)); + errmsg); goto cleanup; } tfp->session = (struct tf_session_info *)cparms.mem_va; @@ -108,10 +116,12 @@ tf_session_create(struct tf *tfp, cparms.alignment = 0; rc = tfp_calloc(&cparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); /* Log error */ TFP_DRV_LOG(ERR, "Failed to allocate session data, rc:%s\n", - strerror(-rc)); + errmsg); goto cleanup; } tfp->session->core_data = cparms.mem_va; @@ -151,10 +161,12 @@ tf_session_create(struct tf *tfp, cparms.alignment = 0; rc = tfp_calloc(&cparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); /* Log error */ TFP_DRV_LOG(ERR, "Failed to allocate session client, rc:%s\n", - strerror(-rc)); + errmsg); goto cleanup; } client = cparms.mem_va; @@ -224,9 +236,11 @@ tf_session_create(struct tf *tfp, dev.ops->tf_dev_get_mailbox()); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "FW Session close failed, rc:%s\n", - strerror(-rc)); + errmsg); } if (tfp->session) { tfp_free(tfp->session->core_data); @@ -259,6 +273,7 @@ tf_session_client_create(struct tf *tfp, struct tf_session *session = NULL; struct tf_session_client *client; struct tfp_calloc_parms cparms; + char errmsg[RTE_STRERR_BUFSIZE]; union tf_session_client_id session_client_id; TF_CHECK_PARMS2(tfp, parms); @@ -266,9 +281,11 @@ tf_session_client_create(struct tf *tfp, /* Using internal version as session client may not exist yet */ rc = tf_session_get_session_internal(tfp, &session); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -287,9 +304,11 @@ tf_session_client_create(struct tf *tfp, parms->ctrl_chan_name, &session_client_id.internal.fw_session_client_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to create client on session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -301,9 +320,11 @@ tf_session_client_create(struct tf *tfp, cparms.alignment = 0; rc = tfp_calloc(&cparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to allocate session client, rc:%s\n", - strerror(-rc)); + errmsg); goto cleanup; } client = cparms.mem_va; @@ -318,9 +339,11 @@ tf_session_client_create(struct tf *tfp, (tfp, &session_client_id.internal.fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Session Firmware id lookup failed, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -365,15 +388,18 @@ tf_session_client_destroy(struct tf *tfp, { int rc; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_session_client *client; TF_CHECK_PARMS2(tfp, parms); rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to lookup session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -403,9 +429,11 @@ tf_session_client_destroy(struct tf *tfp, * thus we remove from the session. */ if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Client destroy on FW Failed, rc:%s\n", - strerror(-rc)); + errmsg); } ll_delete(&tfs->client_ll, &client->ll_entry); @@ -423,6 +451,7 @@ tf_session_open_session(struct tf *tfp, struct tf_session_open_session_parms *parms) { int rc; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_session_client_create_parms scparms; TF_CHECK_PARMS3(tfp, parms, parms->open_cfg->bp); @@ -432,10 +461,12 @@ tf_session_open_session(struct tf *tfp, if (tfp->session == NULL) { rc = tf_session_create(tfp, parms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to create session, ctrl_chan_name:%s, rc:%s\n", parms->open_cfg->ctrl_chan_name, - strerror(-rc)); + errmsg); return rc; } @@ -454,10 +485,12 @@ tf_session_open_session(struct tf *tfp, */ rc = tf_session_client_create(tfp, &scparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to create client on session 0x%x, rc:%s\n", parms->open_cfg->session_id.id, - strerror(-rc)); + errmsg); return rc; } @@ -475,12 +508,15 @@ tf_session_attach_session(struct tf *tfp __rte_unused, struct tf_session_attach_session_parms *parms __rte_unused) { int rc = -EOPNOTSUPP; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Attach not yet supported, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -492,6 +528,7 @@ tf_session_close_session(struct tf *tfp, struct tf_session *tfs = NULL; struct tf_session_client *client; struct tf_dev_info *tfd = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_session_client_destroy_parms scdparms; uint16_t fid; uint8_t fw_session_id = 1; @@ -501,17 +538,21 @@ tf_session_close_session(struct tf *tfp, rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Session lookup failed, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } if (tfs->session_id.id == TF_SESSION_ID_INVALID) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Invalid session id, unable to close, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -529,9 +570,11 @@ tf_session_close_session(struct tf *tfp, fid); if (!client) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Client not part of the session, unable to close, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -553,10 +596,12 @@ tf_session_close_session(struct tf *tfp, */ rc = tf_session_client_destroy(tfp, &scdparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to unregister Client %d, rc:%s\n", client->session_client_id.id, - strerror(-rc)); + errmsg); return rc; } @@ -574,9 +619,11 @@ tf_session_close_session(struct tf *tfp, rc = tf_session_get_device(tfs, &tfd); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Device lookup failed, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -584,9 +631,11 @@ tf_session_close_session(struct tf *tfp, rc = tf_session_get_fw_session_id(tfp, &fw_session_id); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Unable to lookup FW id, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -594,17 +643,21 @@ tf_session_close_session(struct tf *tfp, rc = tf_dev_unbind(tfp, tfd); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Device unbind failed, rc:%s\n", - strerror(-rc)); + errmsg); } rc = tf_msg_session_close(tfp, fw_session_id, mailbox); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "FW Session close failed, rc:%s\n", - strerror(-rc)); + errmsg); } /* Final cleanup as we're last user of the session thus we @@ -652,13 +705,16 @@ tf_session_get_session_internal(struct tf *tfp, struct tf_session **tfs) { int rc = 0; + char errmsg[RTE_STRERR_BUFSIZE]; /* Skip using the check macro as we want to control the error msg */ if (tfp->session == NULL || tfp->session->core_data == NULL) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Session not created, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -674,6 +730,7 @@ tf_session_get_session(struct tf *tfp, int rc; uint16_t fw_fid; bool supported = false; + char errmsg[RTE_STRERR_BUFSIZE]; rc = tf_session_get_session_internal(tfp, tfs); @@ -687,18 +744,22 @@ tf_session_get_session(struct tf *tfp, */ rc = tfp_get_fid(tfp, &fw_fid); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Internal FID lookup\n, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } supported = tf_session_is_fid_supported(*tfs, fw_fid); if (!supported) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG (ERR, "Ctrl channel not registered with session\n, rc:%s\n", - strerror(-rc)); + errmsg); return -EINVAL; } @@ -804,21 +865,26 @@ tf_session_get_fw_session_id(struct tf *tfp, { int rc; struct tf_session *tfs = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; /* Skip using the check macro as we want to control the error msg */ if (tfp->session == NULL) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Session not created, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } if (fw_session_id == NULL) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Invalid Argument(s), rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -837,20 +903,25 @@ tf_session_get_session_id(struct tf *tfp, { int rc; struct tf_session *tfs = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; if (tfp->session == NULL) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Session not created, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } if (session_id == NULL) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Invalid Argument(s), rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -1147,29 +1218,36 @@ tf_session_set_hotup_state(struct tf *tfp, { int rc = 0; struct tf_session *tfs = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Session lookup failed, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } if (!tf_session_is_shared_session(tfs)) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Only shared session able to set state, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = tf_msg_session_set_hotup_state(tfp, parms->state); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Set session hot upgrade state failed, rc:%s\n", - strerror(-rc)); + errmsg); } return rc; @@ -1181,29 +1259,36 @@ tf_session_get_hotup_state(struct tf *tfp, { int rc = 0; struct tf_session *tfs = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; rc = tf_session_get_session(tfp, &tfs); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Session lookup failed, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } if (!tf_session_is_shared_session(tfs)) { rc = -EINVAL; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Only shared session able to get state, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } rc = tf_msg_session_get_hotup_state(tfp, &parms->state, &parms->ref_cnt); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Get session hot upgrade state failed, rc:%s\n", - strerror(-rc)); + errmsg); } return rc; diff --git a/drivers/net/bnxt/tf_core/tf_sram_mgr.c b/drivers/net/bnxt/tf_core/tf_sram_mgr.c index 87e8882fed..14e8a77746 100644 --- a/drivers/net/bnxt/tf_core/tf_sram_mgr.c +++ b/drivers/net/bnxt/tf_core/tf_sram_mgr.c @@ -484,6 +484,7 @@ static struct tf_sram_block { struct tf_sram_block *block; struct tfp_calloc_parms cparms; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; cparms.nitems = 1; @@ -492,9 +493,11 @@ static struct tf_sram_block rc = tfp_calloc(&cparms); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to allocate block, rc:%s\n", - strerror(-rc)); + errmsg); return NULL; } block = (struct tf_sram_block *)cparms.mem_va; @@ -577,6 +580,7 @@ tf_sram_mgr_bind(void **sram_handle) int rc = 0; struct tf_sram *sram; struct tfp_calloc_parms cparms; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS1(sram_handle); @@ -586,9 +590,11 @@ tf_sram_mgr_bind(void **sram_handle) rc = tfp_calloc(&cparms); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to allocate SRAM mgmt data, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } sram = (struct tf_sram *)cparms.mem_va; @@ -602,6 +608,7 @@ tf_sram_mgr_unbind(void *sram_handle) int rc = 0; struct tf_sram *sram; enum tf_sram_bank_id bank_id; + char errmsg[RTE_STRERR_BUFSIZE]; enum tf_sram_slice_size slice_size; enum tf_dir dir; struct tf_sram_slice_list *slice_list; @@ -626,9 +633,12 @@ tf_sram_mgr_unbind(void *sram_handle) bank_id); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), + "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "No SRAM slice list, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } if (tf_sram_get_block_cnt(slice_list)) @@ -653,6 +663,7 @@ int tf_sram_mgr_alloc(void *sram_handle, uint16_t block_id, slice_offset = 0; uint32_t index, next_index; struct tf_sram_block *block; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_rm_allocate_parms aparms = { 0 }; struct tf_rm_free_parms fparms = { 0 }; bool block_is_full; @@ -668,9 +679,11 @@ int tf_sram_mgr_alloc(void *sram_handle, parms->dir, parms->bank_id); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "No SRAM slice list, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -746,6 +759,7 @@ tf_sram_mgr_free(void *sram_handle, struct tf_sram_block *block; bool block_is_empty; struct tf_rm_free_parms fparms = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(sram_handle, parms); @@ -757,9 +771,11 @@ tf_sram_mgr_free(void *sram_handle, parms->dir, parms->bank_id); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "No SRAM slice list, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -781,7 +797,9 @@ tf_sram_mgr_free(void *sram_handle, rc = tf_sram_free_slice(parms->slice_size, slice_offset, block, &block_is_empty); if (rc) { - TFP_DRV_LOG(ERR, "Error freeing slice (%s)\n", strerror(-rc)); + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); + TFP_DRV_LOG(ERR, "Error freeing slice (%s)\n", errmsg); return rc; } #if (STATS_CLEAR_ON_READ_SUPPORT == 0) @@ -801,11 +819,13 @@ tf_sram_mgr_free(void *sram_handle, hparms.hcapi_type = &hcapi_type; rc = tf_rm_get_hcapi_type(&hparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Failed type lookup, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->tbl_type), - strerror(-rc)); + errmsg); return rc; } /* Clear the counter @@ -817,11 +837,13 @@ tf_sram_mgr_free(void *sram_handle, data, parms->sram_offset); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Set failed, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->tbl_type), - strerror(-rc)); + errmsg); return rc; } } @@ -835,15 +857,19 @@ tf_sram_mgr_free(void *sram_handle, rc = tf_rm_free(&fparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Free block_id(%d) failed error(%s)\n", - block_id, strerror(-rc)); + block_id, errmsg); } fparms.index = block_id + 1; rc = tf_rm_free(&fparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Free next block_id(%d) failed error(%s)\n", - block_id + 1, strerror(-rc)); + block_id + 1, errmsg); } /* Free local entry regardless */ tf_sram_free_block(slice_list, block); @@ -921,6 +947,7 @@ int tf_sram_mgr_is_allocated(void *sram_handle, { int rc = 0; struct tf_sram *sram; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_sram_slice_list *slice_list; uint16_t block_id, slice_offset; struct tf_sram_block *block; @@ -935,9 +962,11 @@ int tf_sram_mgr_is_allocated(void *sram_handle, parms->dir, parms->bank_id); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "No SRAM slice list, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } diff --git a/drivers/net/bnxt/tf_core/tf_tbl.c b/drivers/net/bnxt/tf_core/tf_tbl.c index f5f3889934..d82a73ee20 100644 --- a/drivers/net/bnxt/tf_core/tf_tbl.c +++ b/drivers/net/bnxt/tf_core/tf_tbl.c @@ -31,6 +31,7 @@ tf_tbl_bind(struct tf *tfp, struct tbl_rm_db *tbl_db; struct tfp_calloc_parms cparms; struct tf_session *tfs; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -44,8 +45,10 @@ tf_tbl_bind(struct tf *tfp, cparms.size = sizeof(struct tbl_rm_db); cparms.alignment = 0; if (tfp_calloc(&cparms) != 0) { + if (strerror_r(ENOMEM, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ENOMEM); TFP_DRV_LOG(ERR, "tbl_rm_db alloc error %s\n", - strerror(ENOMEM)); + errmsg); return -ENOMEM; } @@ -126,6 +129,7 @@ tf_tbl_alloc(struct tf *tfp __rte_unused, struct tf_dev_info *dev; struct tbl_rm_db *tbl_db; void *tbl_db_ptr = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -141,9 +145,11 @@ tf_tbl_alloc(struct tf *tfp __rte_unused, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TABLE, &tbl_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get tbl_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tbl_db = (struct tbl_rm_db *)tbl_db_ptr; @@ -178,6 +184,7 @@ tf_tbl_free(struct tf *tfp __rte_unused, struct tf_dev_info *dev; struct tbl_rm_db *tbl_db; void *tbl_db_ptr = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -193,9 +200,11 @@ tf_tbl_free(struct tf *tfp __rte_unused, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TABLE, &tbl_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tbl_db = (struct tbl_rm_db *)tbl_db_ptr; @@ -230,11 +239,13 @@ tf_tbl_free(struct tf *tfp __rte_unused, hparms.hcapi_type = &hcapi_type; rc = tf_rm_get_hcapi_type(&hparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Failed type lookup, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); return rc; } /* Clear the counter @@ -246,11 +257,13 @@ tf_tbl_free(struct tf *tfp __rte_unused, data, parms->idx); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Set failed, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); return rc; } } @@ -285,6 +298,7 @@ tf_tbl_set(struct tf *tfp, struct tf_dev_info *dev; struct tbl_rm_db *tbl_db; void *tbl_db_ptr = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS3(tfp, parms, parms->data); @@ -300,9 +314,11 @@ tf_tbl_set(struct tf *tfp, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TABLE, &tbl_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tbl_db = (struct tbl_rm_db *)tbl_db_ptr; @@ -337,11 +353,13 @@ tf_tbl_set(struct tf *tfp, hparms.hcapi_type = &hcapi_type; rc = tf_rm_get_hcapi_type(&hparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Failed type lookup, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); return rc; } @@ -352,11 +370,13 @@ tf_tbl_set(struct tf *tfp, parms->data, parms->idx); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Set failed, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); return rc; } @@ -376,6 +396,7 @@ tf_tbl_get(struct tf *tfp, struct tf_dev_info *dev; struct tbl_rm_db *tbl_db; void *tbl_db_ptr = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS3(tfp, parms, parms->data); @@ -391,9 +412,11 @@ tf_tbl_get(struct tf *tfp, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TABLE, &tbl_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tbl_db = (struct tbl_rm_db *)tbl_db_ptr; @@ -428,11 +451,13 @@ tf_tbl_get(struct tf *tfp, hparms.hcapi_type = &hcapi_type; rc = tf_rm_get_hcapi_type(&hparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Failed type lookup, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); return rc; } @@ -445,11 +470,13 @@ tf_tbl_get(struct tf *tfp, parms->idx, false); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Get failed, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); return rc; } @@ -468,6 +495,7 @@ tf_tbl_bulk_get(struct tf *tfp, struct tf_dev_info *dev; struct tbl_rm_db *tbl_db; void *tbl_db_ptr = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -483,9 +511,11 @@ tf_tbl_bulk_get(struct tf *tfp, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TABLE, &tbl_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tbl_db = (struct tbl_rm_db *)tbl_db_ptr; @@ -513,11 +543,13 @@ tf_tbl_bulk_get(struct tf *tfp, hparms.hcapi_type = &hcapi_type; rc = tf_rm_get_hcapi_type(&hparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Failed type lookup, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); return rc; } @@ -531,11 +563,13 @@ tf_tbl_bulk_get(struct tf *tfp, parms->physical_mem_addr, false); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Bulk get failed, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); } return rc; diff --git a/drivers/net/bnxt/tf_core/tf_tbl_sram.c b/drivers/net/bnxt/tf_core/tf_tbl_sram.c index 3a6f1c68c7..baef72d81c 100644 --- a/drivers/net/bnxt/tf_core/tf_tbl_sram.c +++ b/drivers/net/bnxt/tf_core/tf_tbl_sram.c @@ -101,6 +101,7 @@ static int tf_tbl_sram_get_info(struct tf_tbl_sram_get_info_parms *parms) int rc = 0; uint16_t hcapi_type; uint16_t slices; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_rm_get_hcapi_parms hparms; struct tf_rm_get_slices_parms sparms; @@ -110,11 +111,13 @@ static int tf_tbl_sram_get_info(struct tf_tbl_sram_get_info_parms *parms) rc = tf_rm_get_hcapi_type(&hparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to get hcapi_type %s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->tbl_type), - strerror(-rc)); + errmsg); return rc; } parms->bank_id = tf_tbl_sram_hcapi_2_bank[hcapi_type]; @@ -125,11 +128,13 @@ static int tf_tbl_sram_get_info(struct tf_tbl_sram_get_info_parms *parms) rc = tf_rm_get_slices(&sparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Failed to get slice cnt %s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->tbl_type), - strerror(-rc)); + errmsg); return rc; } if (slices) @@ -161,14 +166,17 @@ tf_tbl_sram_unbind(struct tf *tfp __rte_unused) { int rc = 0; void *sram_handle = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS1(tfp); rc = tf_session_get_sram_db(tfp, &sram_handle); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get sram_handle from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } if (sram_handle) @@ -187,6 +195,7 @@ tf_tbl_sram_alloc(struct tf *tfp, uint16_t idx; struct tf_session *tfs; struct tf_dev_info *dev; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tbl_sram_get_info_parms iparms = { 0 }; struct tf_sram_mgr_alloc_parms aparms = { 0 }; struct tbl_rm_db *tbl_db; @@ -202,9 +211,11 @@ tf_tbl_sram_alloc(struct tf *tfp, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TABLE, &tbl_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get tbl_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -212,9 +223,11 @@ tf_tbl_sram_alloc(struct tf *tfp, rc = tf_session_get_sram_db(tfp, &sram_handle); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get sram_handle from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -273,6 +286,7 @@ tf_tbl_sram_free(struct tf *tfp __rte_unused, struct tf_dev_info *dev; struct tbl_rm_db *tbl_db; void *tbl_db_ptr = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; struct tf_tbl_sram_get_info_parms iparms = { 0 }; struct tf_sram_mgr_free_parms fparms = { 0 }; struct tf_sram_mgr_is_allocated_parms aparms = { 0 }; @@ -288,18 +302,22 @@ tf_tbl_sram_free(struct tf *tfp __rte_unused, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TABLE, &tbl_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tbl_db = (struct tbl_rm_db *)tbl_db_ptr; rc = tf_session_get_sram_db(tfp, &sram_handle); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get sram_handle from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -340,12 +358,14 @@ tf_tbl_sram_free(struct tf *tfp __rte_unused, rc = tf_sram_mgr_is_allocated(sram_handle, &aparms); if (rc || !allocated) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Free of invalid entry:%s idx(0x%x):(%s)\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), parms->idx, - strerror(-rc)); + errmsg); rc = -ENOMEM; return rc; } @@ -405,6 +425,7 @@ tf_tbl_sram_set(struct tf *tfp, struct tf_rm_is_allocated_parms raparms = { 0 }; void *sram_handle = NULL; uint16_t base = 0, shift = 0; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS3(tfp, parms, parms->data); @@ -415,18 +436,22 @@ tf_tbl_sram_set(struct tf *tfp, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TABLE, &tbl_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tbl_db = (struct tbl_rm_db *)tbl_db_ptr; rc = tf_session_get_sram_db(tfp, &sram_handle); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get sram_handle from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -484,12 +509,14 @@ tf_tbl_sram_set(struct tf *tfp, aparms.is_allocated = &allocated; rc = tf_sram_mgr_is_allocated(sram_handle, &aparms); if (rc || !allocated) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Entry not allocated:%s idx(0x%x):(%s)\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), parms->idx, - strerror(-rc)); + errmsg); rc = -ENOMEM; return rc; } @@ -500,11 +527,13 @@ tf_tbl_sram_set(struct tf *tfp, hparms.hcapi_type = &hcapi_type; rc = tf_rm_get_hcapi_type(&hparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Failed type lookup, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); return rc; } @@ -515,11 +544,13 @@ tf_tbl_sram_set(struct tf *tfp, parms->data, parms->idx); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Set failed, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); return rc; } return rc; @@ -541,6 +572,7 @@ tf_tbl_sram_get(struct tf *tfp, struct tf_sram_mgr_is_allocated_parms aparms = { 0 }; void *sram_handle = NULL; bool clear_on_read = false; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS3(tfp, parms, parms->data); @@ -551,18 +583,22 @@ tf_tbl_sram_get(struct tf *tfp, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TABLE, &tbl_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tbl_db = (struct tbl_rm_db *)tbl_db_ptr; rc = tf_session_get_sram_db(tfp, &sram_handle); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get sram_handle from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -587,12 +623,14 @@ tf_tbl_sram_get(struct tf *tfp, rc = tf_sram_mgr_is_allocated(sram_handle, &aparms); if (rc || !allocated) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Entry not allocated:%s idx(0x%x):(%s)\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), parms->idx, - strerror(-rc)); + errmsg); rc = -ENOMEM; return rc; } @@ -603,11 +641,13 @@ tf_tbl_sram_get(struct tf *tfp, hparms.hcapi_type = &hcapi_type; rc = tf_rm_get_hcapi_type(&hparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Failed type lookup, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); return rc; } if (parms->type == TF_TBL_TYPE_ACT_STATS_64) @@ -622,11 +662,13 @@ tf_tbl_sram_get(struct tf *tfp, parms->idx, clear_on_read); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Get failed, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); return rc; } return rc; @@ -649,6 +691,7 @@ tf_tbl_sram_bulk_get(struct tf *tfp, bool allocated = false; void *sram_handle = NULL; bool clear_on_read = false; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -659,18 +702,22 @@ tf_tbl_sram_bulk_get(struct tf *tfp, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TABLE, &tbl_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tbl_db = (struct tbl_rm_db *)tbl_db_ptr; rc = tf_session_get_sram_db(tfp, &sram_handle); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get sram_handle from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -698,12 +745,14 @@ tf_tbl_sram_bulk_get(struct tf *tfp, aparms.is_allocated = &allocated; rc = tf_sram_mgr_is_allocated(sram_handle, &aparms); if (rc || !allocated) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Entry not allocated:%s starting_idx(%d):(%s)\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), parms->starting_idx, - strerror(-rc)); + errmsg); rc = -ENOMEM; return rc; } @@ -711,12 +760,14 @@ tf_tbl_sram_bulk_get(struct tf *tfp, aparms.sram_offset = idx; rc = tf_sram_mgr_is_allocated(sram_handle, &aparms); if (rc || !allocated) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Entry not allocated:%s last_idx(0x%x):(%s)\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), idx, - strerror(-rc)); + errmsg); rc = -ENOMEM; return rc; } @@ -726,11 +777,13 @@ tf_tbl_sram_bulk_get(struct tf *tfp, hparms.hcapi_type = &hcapi_type; rc = tf_rm_get_hcapi_type(&hparms); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Failed type lookup, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); return rc; } @@ -747,11 +800,13 @@ tf_tbl_sram_bulk_get(struct tf *tfp, parms->physical_mem_addr, clear_on_read); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s, Bulk get failed, type:%s, rc:%s\n", tf_dir_2_str(parms->dir), tf_tbl_type_2_str(parms->type), - strerror(-rc)); + errmsg); } return rc; } diff --git a/drivers/net/bnxt/tf_core/tf_tcam.c b/drivers/net/bnxt/tf_core/tf_tcam.c index 9e0671d47b..4e97556bc5 100644 --- a/drivers/net/bnxt/tf_core/tf_tcam.c +++ b/drivers/net/bnxt/tf_core/tf_tcam.c @@ -40,6 +40,7 @@ tf_tcam_bind(struct tf *tfp, uint32_t rx_supported; uint32_t tx_supported; bool no_req = true; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -55,9 +56,11 @@ tf_tcam_bind(struct tf *tfp, if (dev->ops->tf_dev_get_tcam_slice_info == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Operation not supported, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } @@ -90,8 +93,10 @@ tf_tcam_bind(struct tf *tfp, cparms.size = sizeof(struct tcam_rm_db); cparms.alignment = 0; if (tfp_calloc(&cparms) != 0) { + if (strerror_r(ENOMEM, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ENOMEM); TFP_DRV_LOG(ERR, "tcam_rm_db alloc error %s\n", - strerror(ENOMEM)); + errmsg); return -ENOMEM; } @@ -283,6 +288,7 @@ tf_tcam_alloc(struct tf *tfp, uint32_t index; struct tcam_rm_db *tcam_db; void *tcam_db_ptr = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -298,10 +304,12 @@ tf_tcam_alloc(struct tf *tfp, if (dev->ops->tf_dev_get_tcam_slice_info == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -318,9 +326,11 @@ tf_tcam_alloc(struct tf *tfp, return tf_tcam_mgr_alloc_msg(tfp, dev, parms); rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TCAM, &tcam_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get tcam_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tcam_db = (struct tcam_rm_db *)tcam_db_ptr; @@ -367,6 +377,7 @@ tf_tcam_free(struct tf *tfp, int i; struct tcam_rm_db *tcam_db; void *tcam_db_ptr = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -382,10 +393,12 @@ tf_tcam_free(struct tf *tfp, if (dev->ops->tf_dev_get_tcam_slice_info == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -415,9 +428,11 @@ tf_tcam_free(struct tf *tfp, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TCAM, &tcam_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tcam_db = (struct tcam_rm_db *)tcam_db_ptr; @@ -472,12 +487,14 @@ tf_tcam_free(struct tf *tfp, rc = tf_msg_tcam_entry_free(tfp, dev, parms); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: %s: Entry %d free failed, rc:%s\n", tf_dir_2_str(parms->dir), tf_tcam_tbl_2_str(parms->type), parms->idx, - strerror(-rc)); + errmsg); return rc; } @@ -497,6 +514,7 @@ tf_tcam_set(struct tf *tfp __rte_unused, int allocated = 0; struct tcam_rm_db *tcam_db; void *tcam_db_ptr = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -512,10 +530,12 @@ tf_tcam_set(struct tf *tfp __rte_unused, if (dev->ops->tf_dev_get_tcam_slice_info == NULL) { rc = -EOPNOTSUPP; + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: Operation not supported, rc:%s\n", tf_dir_2_str(parms->dir), - strerror(-rc)); + errmsg); return rc; } @@ -533,9 +553,11 @@ tf_tcam_set(struct tf *tfp __rte_unused, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TCAM, &tcam_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tcam_db = (struct tcam_rm_db *)tcam_db_ptr; @@ -574,12 +596,14 @@ tf_tcam_set(struct tf *tfp __rte_unused, rc = tf_msg_tcam_entry_set(tfp, dev, parms); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: %s: Entry %d set failed, rc:%s", tf_dir_2_str(parms->dir), tf_tcam_tbl_2_str(parms->type), parms->idx, - strerror(-rc)); + errmsg); return rc; } return 0; @@ -597,6 +621,7 @@ tf_tcam_get(struct tf *tfp __rte_unused, int allocated = 0; struct tcam_rm_db *tcam_db; void *tcam_db_ptr = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; TF_CHECK_PARMS2(tfp, parms); @@ -616,9 +641,11 @@ tf_tcam_get(struct tf *tfp __rte_unused, rc = tf_session_get_db(tfp, TF_MODULE_TYPE_TCAM, &tcam_db_ptr); if (rc) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "Failed to get em_ext_db from session, rc:%s\n", - strerror(-rc)); + errmsg); return rc; } tcam_db = (struct tcam_rm_db *)tcam_db_ptr; @@ -657,12 +684,14 @@ tf_tcam_get(struct tf *tfp __rte_unused, rc = tf_msg_tcam_entry_get(tfp, dev, parms); if (rc) { /* Log error */ + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); TFP_DRV_LOG(ERR, "%s: %s: Entry %d set failed, rc:%s", tf_dir_2_str(parms->dir), tf_tcam_tbl_2_str(parms->type), parms->idx, - strerror(-rc)); + errmsg); return rc; } From patchwork Mon Nov 4 11:10:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147935 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 D797345C76; Mon, 4 Nov 2024 12:13:58 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B389040E64; Mon, 4 Nov 2024 12:11:18 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id A8FFA40E26 for ; Mon, 4 Nov 2024 12:10:43 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.44]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4XhpdY66MDz20rRw; Mon, 4 Nov 2024 19:09:37 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id A241C14010D; Mon, 4 Nov 2024 19:10:42 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:42 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 24/52] net/af_xdp: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:09 +0800 Message-ID: <20241104111037.3632161-25-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/af_xdp/rte_eth_af_xdp.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c index 814398ba4b..52ad450172 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -1141,6 +1141,7 @@ xsk_umem_info *xdp_umem_configure(struct pmd_internals *internals, void *aligned_addr; uint64_t umem_size; struct rte_mempool_mem_range_info range; + char errmsg[RTE_STRERR_BUFSIZE]; if (internals->shared_umem) { if (get_shared_umem(rxq, internals->if_name, &umem) < 0) @@ -1190,8 +1191,10 @@ xsk_umem_info *xdp_umem_configure(struct pmd_internals *internals, ret = xsk_umem__create(&umem->umem, aligned_addr, umem_size, &rxq->fq, &rxq->cq, &usr_config); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); AF_XDP_LOG_LINE(ERR, "Failed to create umem [%d]: [%s]", - errno, strerror(errno)); + errno, errmsg); goto err; } umem->buffer = aligned_addr; @@ -1394,6 +1397,7 @@ configure_preferred_busy_poll(struct pkt_rx_queue *rxq) static int init_uds_sock(struct sockaddr_un *server, const char *dp_path) { + char errmsg[RTE_STRERR_BUFSIZE]; int sock; sock = socket(AF_UNIX, SOCK_SEQPACKET, 0); @@ -1407,8 +1411,10 @@ init_uds_sock(struct sockaddr_un *server, const char *dp_path) if (connect(sock, (struct sockaddr *)server, sizeof(struct sockaddr_un)) < 0) { close(sock); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); AF_XDP_LOG_LINE(ERR, "Error connecting stream socket errno = [%d]: [%s]", - errno, strerror(errno)); + errno, errmsg); return -1; } @@ -1472,6 +1478,7 @@ read_msg(int sock, char *response, struct sockaddr_un *s, int *fd) struct iovec iov; char control[CMSG_SPACE(sizeof(*fd))]; struct cmsghdr *cmsg; + char errmsg[RTE_STRERR_BUFSIZE]; /* Initialize message header structure */ memset(&msgh, 0, sizeof(msgh)); @@ -1492,7 +1499,9 @@ read_msg(int sock, char *response, struct sockaddr_un *s, int *fd) return 0; if (msglen < 0) { - AF_XDP_LOG_LINE(ERR, "recvmsg failed, %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + AF_XDP_LOG_LINE(ERR, "recvmsg failed, %s", errmsg); return -1; } @@ -1514,6 +1523,7 @@ static int make_request_dp(int sock, struct sockaddr_un *server, char *request, int *req_fd, char *response, int *out_fd, const char *dp_path) { + char errmsg[RTE_STRERR_BUFSIZE]; int rval; AF_XDP_LOG_LINE(DEBUG, "Request: [%s]", request); @@ -1527,7 +1537,9 @@ make_request_dp(int sock, struct sockaddr_un *server, char *request, rval = send_msg(sock, request, req_fd, dp_path); if (rval < 0) { - AF_XDP_LOG_LINE(ERR, "Write error %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + AF_XDP_LOG_LINE(ERR, "Write error %s", errmsg); return -1; } @@ -2013,6 +2025,7 @@ static int parse_prog_arg(const char *key __rte_unused, const char *value, void *extra_args) { + char errmsg[RTE_STRERR_BUFSIZE]; char *path = extra_args; if (strnlen(value, PATH_MAX) == PATH_MAX) { @@ -2022,8 +2035,10 @@ parse_prog_arg(const char *key __rte_unused, } if (access(value, F_OK) != 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); AF_XDP_LOG_LINE(ERR, "Error accessing %s: %s", - value, strerror(errno)); + value, errmsg); return -EINVAL; } From patchwork Mon Nov 4 11:10:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147921 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 D9D9645C76; Mon, 4 Nov 2024 12:12:29 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E172D40EF0; Mon, 4 Nov 2024 12:11:00 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id B937140E28 for ; Mon, 4 Nov 2024 12:10:43 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.194]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Xhpbp5Y9Rzfdh9; Mon, 4 Nov 2024 19:08:06 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id B4F8D1400F4; Mon, 4 Nov 2024 19:10:42 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:42 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 25/52] net/af_xdp: use rte strerror Date: Mon, 4 Nov 2024 19:10:10 +0800 Message-ID: <20241104111037.3632161-26-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The rte_errno may be an RTE-specific error code, use rte_strerror() instead of strerror(). Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/af_xdp/rte_eth_af_xdp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c b/drivers/net/af_xdp/rte_eth_af_xdp.c index 52ad450172..abdbeee80c 100644 --- a/drivers/net/af_xdp/rte_eth_af_xdp.c +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c @@ -2533,7 +2533,7 @@ rte_pmd_af_xdp_probe(struct rte_vdev_device *dev) ret = rte_mp_action_register(ETH_AF_XDP_MP_KEY, afxdp_mp_send_fds); if (ret < 0 && rte_errno != ENOTSUP) { AF_XDP_LOG_LINE(ERR, "%s: Failed to register multi-process IPC callback: %s", - name, strerror(rte_errno)); + name, rte_strerror(rte_errno)); return -1; } } From patchwork Mon Nov 4 11:10:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147924 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 EAED445C76; Mon, 4 Nov 2024 12:12:47 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6FD8E410DF; Mon, 4 Nov 2024 12:11:04 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id E495440E34 for ; Mon, 4 Nov 2024 12:10:43 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.162.254]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcp2TTYzyVPV; Mon, 4 Nov 2024 19:08:58 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id DE65A180105; Mon, 4 Nov 2024 19:10:42 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:42 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 26/52] net/bonding: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:11 +0800 Message-ID: <20241104111037.3632161-27-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/bonding/bonding_testpmd.c | 18 ++++++++++++------ drivers/net/bonding/rte_eth_bond_api.c | 5 ++++- drivers/net/bonding/rte_eth_bond_pmd.c | 16 ++++++++++++---- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/drivers/net/bonding/bonding_testpmd.c b/drivers/net/bonding/bonding_testpmd.c index 8fcd6cadd0..56cca3d447 100644 --- a/drivers/net/bonding/bonding_testpmd.c +++ b/drivers/net/bonding/bonding_testpmd.c @@ -541,6 +541,7 @@ static void cmd_set_bond_mac_addr_parsed(void *parsed_result, __rte_unused struct cmdline *cl, __rte_unused void *data) { struct cmd_set_bond_mac_addr_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; if (port_id_is_invalid(res->port_num, ENABLED_WARN)) @@ -549,9 +550,11 @@ static void cmd_set_bond_mac_addr_parsed(void *parsed_result, ret = rte_eth_bond_mac_address_set(res->port_num, &res->address); /* check the return value and print it if is < 0 */ - if (ret < 0) - fprintf(stderr, "set_bond_mac_addr error: (%s)\n", - strerror(-ret)); + if (ret < 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "set_bond_mac_addr error: (%s)\n", errmsg); + } } static cmdline_parse_token_string_t cmd_set_bond_mac_addr_set = @@ -597,14 +600,17 @@ static void cmd_set_bond_mon_period_parsed(void *parsed_result, __rte_unused struct cmdline *cl, __rte_unused void *data) { struct cmd_set_bond_mon_period_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; ret = rte_eth_bond_link_monitoring_set(res->port_num, res->period_ms); /* check the return value and print it if is < 0 */ - if (ret < 0) - fprintf(stderr, "set_bond_mac_addr error: (%s)\n", - strerror(-ret)); + if (ret < 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "set_bond_mac_addr error: (%s)\n", errmsg); + } } static cmdline_parse_token_string_t cmd_set_bond_mon_period_set = diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c index ffc1322047..11a37dd142 100644 --- a/drivers/net/bonding/rte_eth_bond_api.c +++ b/drivers/net/bonding/rte_eth_bond_api.c @@ -465,6 +465,7 @@ __eth_bond_member_add_lock_free(uint16_t bonding_port_id, uint16_t member_port_i struct bond_dev_private *internals; struct rte_eth_link link_props; struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; bonding_eth_dev = &rte_eth_devices[bonding_port_id]; @@ -481,9 +482,11 @@ __eth_bond_member_add_lock_free(uint16_t bonding_port_id, uint16_t member_port_i ret = rte_eth_dev_info_get(member_port_id, &dev_info); if (ret != 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); RTE_BOND_LOG(ERR, "%s: Error during getting device (port %u) info: %s", - __func__, member_port_id, strerror(-ret)); + __func__, member_port_id, errmsg); return ret; } diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 91bf2c2345..9849e0ecb0 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -165,6 +165,7 @@ bond_ethdev_8023ad_flow_verify(struct rte_eth_dev *bond_dev, struct rte_eth_dev_info member_info; struct rte_flow_error error; struct bond_dev_private *internals = bond_dev->data->dev_private; + char errmsg[RTE_STRERR_BUFSIZE]; const struct rte_flow_action_queue lacp_queue_conf = { .index = 0, @@ -191,9 +192,11 @@ bond_ethdev_8023ad_flow_verify(struct rte_eth_dev *bond_dev, ret = rte_eth_dev_info_get(member_port, &member_info); if (ret != 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); RTE_BOND_LOG(ERR, "%s: Error during getting device (port %u) info: %s", - __func__, member_port, strerror(-ret)); + __func__, member_port, errmsg); return ret; } @@ -214,6 +217,7 @@ bond_8023ad_slow_pkt_hw_filter_supported(uint16_t port_id) { struct rte_eth_dev *bond_dev = &rte_eth_devices[port_id]; struct bond_dev_private *internals = bond_dev->data->dev_private; struct rte_eth_dev_info bond_info; + char errmsg[RTE_STRERR_BUFSIZE]; uint16_t idx; int ret; @@ -221,10 +225,11 @@ bond_8023ad_slow_pkt_hw_filter_supported(uint16_t port_id) { if (internals->member_count > 0) { ret = rte_eth_dev_info_get(bond_dev->data->port_id, &bond_info); if (ret != 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); RTE_BOND_LOG(ERR, "%s: Error during getting device (port %u) info: %s", - __func__, bond_dev->data->port_id, - strerror(-ret)); + __func__, bond_dev->data->port_id, errmsg); return ret; } @@ -2264,6 +2269,7 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { struct bond_dev_private *internals = dev->data->dev_private; struct bond_member_details member; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; uint16_t max_nb_rx_queues = UINT16_MAX; @@ -2287,11 +2293,13 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) member = internals->members[idx]; ret = rte_eth_dev_info_get(member.port_id, &member_info); if (ret != 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); RTE_BOND_LOG(ERR, "%s: Error during getting device (port %u) info: %s", __func__, member.port_id, - strerror(-ret)); + errmsg); return ret; } From patchwork Mon Nov 4 11:10:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147922 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 1E83545C76; Mon, 4 Nov 2024 12:12:36 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 191A240EE5; Mon, 4 Nov 2024 12:11:02 +0100 (CET) Received: from szxga07-in.huawei.com (szxga07-in.huawei.com [45.249.212.35]) by mails.dpdk.org (Postfix) with ESMTP id 18AA940E37 for ; Mon, 4 Nov 2024 12:10:44 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.162.112]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcv6lvrz1SDy6; Mon, 4 Nov 2024 19:09:03 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 13BCF140120; Mon, 4 Nov 2024 19:10:43 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:42 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 27/52] net/bonding: use rte strerror Date: Mon, 4 Nov 2024 19:10:12 +0800 Message-ID: <20241104111037.3632161-28-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The rte_errno may be an RTE-specific error code, use rte_strerror() instead of strerror(). Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/bonding/rte_eth_bond_flow.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_flow.c b/drivers/net/bonding/rte_eth_bond_flow.c index 5d0be5caf5..a38cc84f56 100644 --- a/drivers/net/bonding/rte_eth_bond_flow.c +++ b/drivers/net/bonding/rte_eth_bond_flow.c @@ -31,7 +31,7 @@ bond_flow_alloc(int numa_node, const struct rte_flow_attr *attr, if (ret < 0) { RTE_BOND_LOG(ERR, "Unable to process flow rule (%s): %s", error.message ? error.message : "unspecified", - strerror(rte_errno)); + rte_strerror(rte_errno)); return NULL; } flow = rte_zmalloc_socket(NULL, offsetof(struct rte_flow, rule) + ret, @@ -45,7 +45,7 @@ bond_flow_alloc(int numa_node, const struct rte_flow_attr *attr, if (ret < 0) { RTE_BOND_LOG(ERR, "Failed to copy flow rule (%s): %s", error.message ? error.message : "unspecified", - strerror(rte_errno)); + rte_strerror(rte_errno)); rte_free(flow); return NULL; } From patchwork Mon Nov 4 11:10:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147949 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 2BC6045C76; Mon, 4 Nov 2024 12:15:37 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6AB0B427DA; Mon, 4 Nov 2024 12:11:36 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id 43FA440E16 for ; Mon, 4 Nov 2024 12:10:44 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4XhpdZ3HyHz20rWf; Mon, 4 Nov 2024 19:09:38 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 3F54C1A0190; Mon, 4 Nov 2024 19:10:43 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:43 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 28/52] net/cnxk: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:13 +0800 Message-ID: <20241104111037.3632161-29-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/cnxk/cnxk_rep_msg.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/net/cnxk/cnxk_rep_msg.c b/drivers/net/cnxk/cnxk_rep_msg.c index a222e2b5cd..c1c10eab5b 100644 --- a/drivers/net/cnxk/cnxk_rep_msg.c +++ b/drivers/net/cnxk/cnxk_rep_msg.c @@ -111,6 +111,7 @@ send_message_on_socket(int socketfd, void *data, uint32_t len, int afd) static int open_socket_ctrl_channel(void) { + char errmsg[RTE_STRERR_BUFSIZE]; struct sockaddr_un un; int sock_fd; @@ -141,13 +142,17 @@ open_socket_ctrl_channel(void) strncpy(un.sun_path, CNXK_ESWITCH_CTRL_MSG_SOCK_PATH, sizeof(un.sun_path) - 1); if (bind(sock_fd, (struct sockaddr *)&un, sizeof(un)) < 0) { - plt_err("Failed to bind %s: %s", un.sun_path, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + plt_err("Failed to bind %s: %s", un.sun_path, errmsg); close(sock_fd); return -errno; } if (listen(sock_fd, 1) < 0) { - plt_err("Failed to listen, err %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + plt_err("Failed to listen, err %s", errmsg); close(sock_fd); return -errno; } From patchwork Mon Nov 4 11:10:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147926 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 3C39045C76; Mon, 4 Nov 2024 12:13:00 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BAF15410F1; Mon, 4 Nov 2024 12:11:06 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id 68F2340E38 for ; Mon, 4 Nov 2024 12:10:44 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.163]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcw6B8Mz2Fbsh; Mon, 4 Nov 2024 19:09:04 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 66B13180019; Mon, 4 Nov 2024 19:10:43 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:43 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 29/52] net/dpaa: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:14 +0800 Message-ID: <20241104111037.3632161-30-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/dpaa/dpaa_ethdev.c | 10 ++++++++-- drivers/net/dpaa/fmlib/fm_lib.c | 15 ++++++++++++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c index e8d34e5898..0bdd5458e2 100644 --- a/drivers/net/dpaa/dpaa_ethdev.c +++ b/drivers/net/dpaa/dpaa_ethdev.c @@ -1075,6 +1075,7 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, struct fman_if *fif = dev->process_private; struct qman_fq *rxq = &dpaa_intf->rx_queues[queue_idx]; struct qm_mcc_initfq opts = {0}; + char errmsg[RTE_STRERR_BUFSIZE]; u32 ch_id, flags = 0; int ret; u32 buffsz = rte_pktmbuf_data_room_size(mp) - RTE_PKTMBUF_HEADROOM; @@ -1217,8 +1218,10 @@ int dpaa_eth_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx, } ret = qman_init_fq(rxq, flags, &opts); if (ret) { + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); DPAA_PMD_ERR("Channel/Q association failed. fqid 0x%x " - "ret:%d(%s)", rxq->fqid, ret, strerror(ret)); + "ret:%d(%s)", rxq->fqid, ret, errmsg); return ret; } if (dpaa_svr_family == SVR_LS1043A_FAMILY) { @@ -1310,6 +1313,7 @@ dpaa_eth_eventq_attach(const struct rte_eth_dev *dev, struct dpaa_if *dpaa_intf = dev->data->dev_private; struct qman_fq *rxq = &dpaa_intf->rx_queues[eth_rx_queue_id]; struct qm_mcc_initfq opts = {0}; + char errmsg[RTE_STRERR_BUFSIZE]; if (dpaa_push_mode_max_queue) { DPAA_PMD_WARN("PUSH mode q and EVENTDEV are not compatible"); @@ -1352,8 +1356,10 @@ dpaa_eth_eventq_attach(const struct rte_eth_dev *dev, ret = qman_init_fq(rxq, flags, &opts); if (ret) { + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); DPAA_PMD_ERR("Ev-Channel/Q association failed. fqid 0x%x " - "ret:%d(%s)", rxq->fqid, ret, strerror(ret)); + "ret:%d(%s)", rxq->fqid, ret, errmsg); return ret; } diff --git a/drivers/net/dpaa/fmlib/fm_lib.c b/drivers/net/dpaa/fmlib/fm_lib.c index b35feba004..347d24906a 100644 --- a/drivers/net/dpaa/fmlib/fm_lib.c +++ b/drivers/net/dpaa/fmlib/fm_lib.c @@ -96,14 +96,17 @@ uint32_t fm_get_api_version(t_handle h_fm, ioc_fm_api_version_t *p_version) { t_device *p_dev = (t_device *)h_fm; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; _fml_dbg("Calling..."); ret = ioctl(p_dev->fd, FM_IOC_GET_API_VERSION, p_version); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DPAA_PMD_ERR("cannot get API version, error %i (%s)", - errno, strerror(errno)); + errno, errmsg); RETURN_ERROR(MINOR, E_INVALID_OPERATION, NO_MSG); } _fml_dbg("Finishing."); @@ -250,6 +253,7 @@ fm_pcd_kg_scheme_set(t_handle h_fm_pcd, ioc_fm_pcd_kg_scheme_params_t *params) { t_device *p_pcd_dev = (t_device *)h_fm_pcd; + char errmsg[RTE_STRERR_BUFSIZE]; t_device *p_dev = NULL; int ret; @@ -275,8 +279,10 @@ fm_pcd_kg_scheme_set(t_handle h_fm_pcd, ret = ioctl(p_pcd_dev->fd, FM_PCD_IOC_KG_SCHEME_SET, params); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DPAA_PMD_ERR(" cannot set kg scheme, error %i (%s)", - errno, strerror(errno)); + errno, errmsg); return NULL; } @@ -300,6 +306,7 @@ uint32_t fm_pcd_kg_scheme_delete(t_handle h_scheme) { t_device *p_dev = (t_device *)h_scheme; + char errmsg[RTE_STRERR_BUFSIZE]; t_device *p_pcd_dev = NULL; ioc_fm_obj_t id; @@ -309,8 +316,10 @@ fm_pcd_kg_scheme_delete(t_handle h_scheme) id.obj = UINT_TO_PTR(p_dev->id); if (ioctl(p_pcd_dev->fd, FM_PCD_IOC_KG_SCHEME_DELETE, &id)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DPAA_PMD_WARN("cannot delete kg scheme, error %i (%s)", - errno, strerror(errno)); + errno, errmsg); RETURN_ERROR(MINOR, E_INVALID_OPERATION, NO_MSG); } From patchwork Mon Nov 4 11:10:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147925 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 7C8E945C76; Mon, 4 Nov 2024 12:12:54 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 95383410E6; Mon, 4 Nov 2024 12:11:05 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 90FE640E3A for ; Mon, 4 Nov 2024 12:10:44 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.174]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Xhpbq4L4Fzfdh8; Mon, 4 Nov 2024 19:08:07 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 8D0E9140137; Mon, 4 Nov 2024 19:10:43 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:43 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 30/52] net/dpaa2: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:15 +0800 Message-ID: <20241104111037.3632161-31-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/dpaa2/dpaa2_ethdev.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/net/dpaa2/dpaa2_ethdev.c b/drivers/net/dpaa2/dpaa2_ethdev.c index 7b3e587a8d..6a058e90f8 100644 --- a/drivers/net/dpaa2/dpaa2_ethdev.c +++ b/drivers/net/dpaa2/dpaa2_ethdev.c @@ -1163,22 +1163,28 @@ dpaa2_eth_setup_irqs(struct rte_eth_dev *dev, int enable) struct fsl_mc_io *dpni = (struct fsl_mc_io *)dev->process_private; int irq_index = DPNI_IRQ_INDEX; unsigned int mask = DPNI_IRQ_EVENT_LINK_CHANGED; + char errmsg[RTE_STRERR_BUFSIZE]; PMD_INIT_FUNC_TRACE(); err = dpni_set_irq_mask(dpni, CMD_PRI_LOW, priv->token, irq_index, mask); if (err < 0) { + if (strerror_r(-err, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -err); DPAA2_PMD_ERR("Error: dpni_set_irq_mask():%d (%s)", err, - strerror(-err)); + errmsg); return err; } err = dpni_set_irq_enable(dpni, CMD_PRI_LOW, priv->token, irq_index, enable); - if (err < 0) + if (err < 0) { + if (strerror_r(-err, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -err); DPAA2_PMD_ERR("Error: dpni_set_irq_enable():%d (%s)", err, - strerror(-err)); + errmsg); + } return err; } From patchwork Mon Nov 4 11:10:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147930 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 6FD5145C76; Mon, 4 Nov 2024 12:13:24 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6FF7D41143; Mon, 4 Nov 2024 12:11:11 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 6259B40E3F for ; Mon, 4 Nov 2024 12:10:45 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.174]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4XhpdZ5ZZxzQsgH; Mon, 4 Nov 2024 19:09:38 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id C2822140137; Mon, 4 Nov 2024 19:10:43 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:43 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 31/52] net/enetfec: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:16 +0800 Message-ID: <20241104111037.3632161-32-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/enetfec/enet_uio.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/enetfec/enet_uio.c b/drivers/net/enetfec/enet_uio.c index 9f4e896985..c4d4e60c64 100644 --- a/drivers/net/enetfec/enet_uio.c +++ b/drivers/net/enetfec/enet_uio.c @@ -222,6 +222,7 @@ config_enetfec_uio(struct enetfec_private *fep) int enetfec_configure(void) { + char errmsg[RTE_STRERR_BUFSIZE]; char uio_name[32]; int uio_minor_number = -1; int ret; @@ -230,8 +231,10 @@ enetfec_configure(void) d = opendir(FEC_UIO_DEVICE_SYS_ATTR_PATH); if (d == NULL) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); ENETFEC_PMD_ERR("Error opening directory '%s': %s", - FEC_UIO_DEVICE_SYS_ATTR_PATH, strerror(errno)); + FEC_UIO_DEVICE_SYS_ATTR_PATH, errmsg); return -1; } From patchwork Mon Nov 4 11:10:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147946 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 52D2345C76; Mon, 4 Nov 2024 12:15:15 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1BC4B427D1; Mon, 4 Nov 2024 12:11:33 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id 0F9CE40E37 for ; Mon, 4 Nov 2024 12:10:45 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.44]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcx2k7yz2Fbsj; Mon, 4 Nov 2024 19:09:05 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id E3EC11400D2; Mon, 4 Nov 2024 19:10:43 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:43 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 32/52] net/failsafe: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:17 +0800 Message-ID: <20241104111037.3632161-33-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/failsafe/failsafe.c | 13 ++++++++++--- drivers/net/failsafe/failsafe_args.c | 12 +++++++++--- drivers/net/failsafe/failsafe_eal.c | 5 ++++- drivers/net/failsafe/failsafe_ops.c | 5 ++++- drivers/net/failsafe/failsafe_private.h | 17 +++++++++++++---- 5 files changed, 40 insertions(+), 12 deletions(-) diff --git a/drivers/net/failsafe/failsafe.c b/drivers/net/failsafe/failsafe.c index 32811403b4..345dd13eff 100644 --- a/drivers/net/failsafe/failsafe.c +++ b/drivers/net/failsafe/failsafe.c @@ -135,21 +135,28 @@ fs_mutex_init(struct fs_priv *priv) { int ret; pthread_mutexattr_t attr; + char errmsg[RTE_STRERR_BUFSIZE]; ret = pthread_mutexattr_init(&attr); if (ret) { - ERROR("Cannot initiate mutex attributes - %s", strerror(ret)); + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); + ERROR("Cannot initiate mutex attributes - %s", errmsg); return ret; } /* Allow mutex relocks for the thread holding the mutex. */ ret = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); if (ret) { - ERROR("Cannot set mutex type - %s", strerror(ret)); + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); + ERROR("Cannot set mutex type - %s", errmsg); return ret; } ret = pthread_mutex_init(&priv->hotplug_mutex, &attr); if (ret) { - ERROR("Cannot initiate mutex - %s", strerror(ret)); + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); + ERROR("Cannot initiate mutex - %s", errmsg); return ret; } return 0; diff --git a/drivers/net/failsafe/failsafe_args.c b/drivers/net/failsafe/failsafe_args.c index 1b8f1d3050..fe53fecda8 100644 --- a/drivers/net/failsafe/failsafe_args.c +++ b/drivers/net/failsafe/failsafe_args.c @@ -89,6 +89,7 @@ fs_execute_cmd(struct sub_device *sdev, char *cmdline) FILE *fp; /* store possible newline as well */ char output[DEVARGS_MAXLEN + 1]; + char errmsg[RTE_STRERR_BUFSIZE]; size_t len; int ret; @@ -112,7 +113,9 @@ fs_execute_cmd(struct sub_device *sdev, char *cmdline) fp = popen(sdev->cmdline, "r"); if (fp == NULL) { ret = -errno; - ERROR("popen: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + ERROR("popen: %s", errmsg); return ret; } /* We only read one line */ @@ -130,8 +133,11 @@ fs_execute_cmd(struct sub_device *sdev, char *cmdline) if (ret) ERROR("Parsing device '%s' failed", output); ret_pclose: - if (pclose(fp) == -1) - ERROR("pclose: %s", strerror(errno)); + if (pclose(fp) == -1) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + ERROR("pclose: %s", errmsg); + } return ret; } diff --git a/drivers/net/failsafe/failsafe_eal.c b/drivers/net/failsafe/failsafe_eal.c index e79d3b4120..8af72c6468 100644 --- a/drivers/net/failsafe/failsafe_eal.c +++ b/drivers/net/failsafe/failsafe_eal.c @@ -33,6 +33,7 @@ fs_ethdev_portid_get(const char *name, uint16_t *port_id) static int fs_bus_init(struct rte_eth_dev *dev) { + char errmsg[RTE_STRERR_BUFSIZE]; struct sub_device *sdev; struct rte_devargs *da; uint8_t i; @@ -99,8 +100,10 @@ fs_bus_init(struct rte_eth_dev *dev) " %d named %s", i, da->name); ret = rte_eth_dev_owner_set(pid, &PRIV(dev)->my_owner); if (ret < 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); INFO("sub_device %d owner set failed (%s), " - "will try again later", i, strerror(-ret)); + "will try again later", i, errmsg); continue; } else if (strncmp(rte_eth_devices[pid].device->name, da->name, strlen(da->name)) != 0) { diff --git a/drivers/net/failsafe/failsafe_ops.c b/drivers/net/failsafe/failsafe_ops.c index 9c013e0419..f1734a5d36 100644 --- a/drivers/net/failsafe/failsafe_ops.c +++ b/drivers/net/failsafe/failsafe_ops.c @@ -409,6 +409,7 @@ fs_rx_queue_setup(struct rte_eth_dev *dev, const struct rte_eth_rxconf *rx_conf, struct rte_mempool *mb_pool) { + char errmsg[RTE_STRERR_BUFSIZE]; struct sub_device *sdev; struct rxq *rxq; uint8_t i; @@ -452,7 +453,9 @@ fs_rx_queue_setup(struct rte_eth_dev *dev, #ifdef RTE_EXEC_ENV_LINUX rxq->event_fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); if (rxq->event_fd < 0) { - ERROR("Failed to create an eventfd: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + ERROR("Failed to create an eventfd: %s", errmsg); fs_unlock(dev, 0); return -errno; } diff --git a/drivers/net/failsafe/failsafe_private.h b/drivers/net/failsafe/failsafe_private.h index babea6016e..54ac39b87b 100644 --- a/drivers/net/failsafe/failsafe_private.h +++ b/drivers/net/failsafe/failsafe_private.h @@ -401,20 +401,25 @@ fs_dev(struct sub_device *sdev) { static inline int fs_lock(struct rte_eth_dev *dev, unsigned int is_alarm) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret; if (is_alarm) { ret = pthread_mutex_trylock(&PRIV(dev)->hotplug_mutex); if (ret) { + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); DEBUG("Hot-plug mutex lock trying failed(%s), will try" - " again later...", strerror(ret)); + " again later...", errmsg); return ret; } PRIV(dev)->alarm_lock = 1; } else { ret = pthread_mutex_lock(&PRIV(dev)->hotplug_mutex); if (ret) { - ERROR("Cannot lock mutex(%s)", strerror(ret)); + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); + ERROR("Cannot lock mutex(%s)", errmsg); return ret; } } @@ -428,6 +433,7 @@ fs_lock(struct rte_eth_dev *dev, unsigned int is_alarm) static inline void fs_unlock(struct rte_eth_dev *dev, unsigned int is_alarm) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret; if (is_alarm) { @@ -435,8 +441,11 @@ fs_unlock(struct rte_eth_dev *dev, unsigned int is_alarm) PRIV(dev)->alarm_lock = 0; } ret = pthread_mutex_unlock(&PRIV(dev)->hotplug_mutex); - if (ret) - ERROR("Cannot unlock hot-plug mutex(%s)", strerror(ret)); + if (ret) { + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); + ERROR("Cannot unlock hot-plug mutex(%s)", errmsg); + } } /* From patchwork Mon Nov 4 11:10:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147937 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 14A5345C76; Mon, 4 Nov 2024 12:14:11 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0BFC9410EE; Mon, 4 Nov 2024 12:11:21 +0100 (CET) Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by mails.dpdk.org (Postfix) with ESMTP id E851D40E15 for ; Mon, 4 Nov 2024 12:10:45 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.105]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4XhpcB4zZqz1T9kW; Mon, 4 Nov 2024 19:08:26 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 15A161402C8; Mon, 4 Nov 2024 19:10:44 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:43 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 33/52] net/failsafe: use rte strerror Date: Mon, 4 Nov 2024 19:10:18 +0800 Message-ID: <20241104111037.3632161-34-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The rte_errno may be an RTE-specific error code, use rte_strerror() instead of strerror(). Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/failsafe/failsafe.c | 2 +- drivers/net/failsafe/failsafe_eal.c | 2 +- drivers/net/failsafe/failsafe_flow.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/net/failsafe/failsafe.c b/drivers/net/failsafe/failsafe.c index 345dd13eff..f32af0b2c3 100644 --- a/drivers/net/failsafe/failsafe.c +++ b/drivers/net/failsafe/failsafe.c @@ -92,7 +92,7 @@ failsafe_hotplug_alarm_cancel(struct rte_eth_dev *dev) rte_eal_alarm_cancel(fs_hotplug_alarm, dev); if (rte_errno) { ERROR("rte_eal_alarm_cancel failed (errno: %s)", - strerror(rte_errno)); + rte_strerror(rte_errno)); ret = -rte_errno; } else { PRIV(dev)->pending_alarm = 0; diff --git a/drivers/net/failsafe/failsafe_eal.c b/drivers/net/failsafe/failsafe_eal.c index 8af72c6468..121dee9349 100644 --- a/drivers/net/failsafe/failsafe_eal.c +++ b/drivers/net/failsafe/failsafe_eal.c @@ -53,7 +53,7 @@ fs_bus_init(struct rte_eth_dev *dev) if (ret < 0) { ERROR("sub_device %d probe failed %s%s%s", i, rte_errno ? "(" : "", - rte_errno ? strerror(rte_errno) : "", + rte_errno ? rte_strerror(rte_errno) : "", rte_errno ? ")" : ""); continue; } diff --git a/drivers/net/failsafe/failsafe_flow.c b/drivers/net/failsafe/failsafe_flow.c index 707e6c63b5..5d17182cc5 100644 --- a/drivers/net/failsafe/failsafe_flow.c +++ b/drivers/net/failsafe/failsafe_flow.c @@ -33,7 +33,7 @@ fs_flow_allocate(const struct rte_flow_attr *attr, if (ret < 0) { ERROR("Unable to process flow rule (%s): %s", error.message ? error.message : "unspecified", - strerror(rte_errno)); + rte_strerror(rte_errno)); return NULL; } flow = rte_zmalloc(NULL, offsetof(struct rte_flow, rule) + ret, @@ -47,7 +47,7 @@ fs_flow_allocate(const struct rte_flow_attr *attr, if (ret < 0) { ERROR("Failed to copy flow rule (%s): %s", error.message ? error.message : "unspecified", - strerror(rte_errno)); + rte_strerror(rte_errno)); rte_free(flow); return NULL; } From patchwork Mon Nov 4 11:10:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147933 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 75BE745C76; Mon, 4 Nov 2024 12:13:44 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6147B410E8; Mon, 4 Nov 2024 12:11:15 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id 7153640E38 for ; Mon, 4 Nov 2024 12:10:45 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.234]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4Xhpcx5QXVz2Fbsg; Mon, 4 Nov 2024 19:09:05 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 46E6B1401F3; Mon, 4 Nov 2024 19:10:44 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:44 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 34/52] net/i40e: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:19 +0800 Message-ID: <20241104111037.3632161-35-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/i40e/i40e_testpmd.c | 109 +++++++++++++++++++++++++------- 1 file changed, 86 insertions(+), 23 deletions(-) diff --git a/drivers/net/i40e/i40e_testpmd.c b/drivers/net/i40e/i40e_testpmd.c index b6ef5d6e42..ef910c1cbc 100644 --- a/drivers/net/i40e/i40e_testpmd.c +++ b/drivers/net/i40e/i40e_testpmd.c @@ -33,6 +33,7 @@ cmd_queue_region_parsed(void *parsed_result, int ret = -ENOTSUP; struct rte_pmd_i40e_queue_region_conf region_conf; enum rte_pmd_i40e_queue_region_op op_type; + char errmsg[RTE_STRERR_BUFSIZE]; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; @@ -52,8 +53,10 @@ cmd_queue_region_parsed(void *parsed_result, fprintf(stderr, "function not implemented or supported\n"); break; default: + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); fprintf(stderr, "queue region config error: (%s)\n", - strerror(-ret)); + errmsg); } } @@ -128,6 +131,7 @@ cmd_region_flowtype_parsed(void *parsed_result, int ret = -ENOTSUP; struct rte_pmd_i40e_queue_region_conf region_conf; enum rte_pmd_i40e_queue_region_op op_type; + char errmsg[RTE_STRERR_BUFSIZE]; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; @@ -147,8 +151,10 @@ cmd_region_flowtype_parsed(void *parsed_result, fprintf(stderr, "function not implemented or supported\n"); break; default: + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); fprintf(stderr, "region flowtype config error: (%s)\n", - strerror(-ret)); + errmsg); } } @@ -214,6 +220,7 @@ cmd_user_priority_region_parsed(void *parsed_result, int ret = -ENOTSUP; struct rte_pmd_i40e_queue_region_conf region_conf; enum rte_pmd_i40e_queue_region_op op_type; + char errmsg[RTE_STRERR_BUFSIZE]; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; @@ -232,8 +239,10 @@ cmd_user_priority_region_parsed(void *parsed_result, fprintf(stderr, "function not implemented or supported\n"); break; default: + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); fprintf(stderr, "user_priority region config error: (%s)\n", - strerror(-ret)); + errmsg); } } @@ -299,6 +308,7 @@ cmd_flush_queue_region_parsed(void *parsed_result, int ret = -ENOTSUP; struct rte_pmd_i40e_queue_region_conf region_conf; enum rte_pmd_i40e_queue_region_op op_type; + char errmsg[RTE_STRERR_BUFSIZE]; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; @@ -319,8 +329,10 @@ cmd_flush_queue_region_parsed(void *parsed_result, fprintf(stderr, "function not implemented or supported\n"); break; default: + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); fprintf(stderr, "queue region config flush error: (%s)\n", - strerror(-ret)); + errmsg); } } @@ -413,6 +425,7 @@ cmd_show_queue_region_info_parsed(void *parsed_result, int ret = -ENOTSUP; struct rte_pmd_i40e_queue_regions rte_pmd_regions; enum rte_pmd_i40e_queue_region_op op_type; + char errmsg[RTE_STRERR_BUFSIZE]; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; @@ -432,8 +445,10 @@ cmd_show_queue_region_info_parsed(void *parsed_result, fprintf(stderr, "function not implemented or supported\n"); break; default: + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); fprintf(stderr, "queue region config info show error: (%s)\n", - strerror(-ret)); + errmsg); } } @@ -492,6 +507,7 @@ cmd_flow_director_filter_parsed(void *parsed_result, mapping[RTE_PMD_I40E_FLOW_TYPE_MAX]; struct rte_pmd_i40e_pkt_template_conf conf; uint16_t flow_type = str_to_flowtype(res->flow_type); + char errmsg[RTE_STRERR_BUFSIZE]; uint16_t i, port = res->port_id; uint8_t add; @@ -534,9 +550,11 @@ cmd_flow_director_filter_parsed(void *parsed_result, ret = rte_pmd_i40e_flow_add_del_packet_template(port, &conf, add); - if (ret < 0) - fprintf(stderr, "flow director config error: (%s)\n", - strerror(-ret)); + if (ret < 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "flow director config error: (%s)\n", errmsg); + } close_file(conf.input.packet); } @@ -645,6 +663,7 @@ cmd_set_vf_promisc_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_vf_promisc_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = -ENOTSUP; __rte_unused int is_on = (strcmp(res->on_off, "on") == 0) ? 1 : 0; @@ -666,7 +685,9 @@ cmd_set_vf_promisc_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -724,6 +745,7 @@ cmd_set_vf_allmulti_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_vf_allmulti_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = -ENOTSUP; __rte_unused int is_on = (strcmp(res->on_off, "on") == 0) ? 1 : 0; @@ -745,7 +767,9 @@ cmd_set_vf_allmulti_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -803,6 +827,7 @@ cmd_set_vf_broadcast_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_set_vf_broadcast_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = -ENOTSUP; __rte_unused int is_on = (strcmp(res->on_off, "on") == 0) ? 1 : 0; @@ -825,7 +850,9 @@ cmd_set_vf_broadcast_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -886,6 +913,7 @@ cmd_set_vf_vlan_tag_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_set_vf_vlan_tag_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = -ENOTSUP; __rte_unused int is_on = (strcmp(res->on_off, "on") == 0) ? 1 : 0; @@ -908,7 +936,9 @@ cmd_set_vf_vlan_tag_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -992,6 +1022,7 @@ cmd_vf_max_bw_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_vf_tc_bw_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = -ENOTSUP; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) @@ -1013,7 +1044,9 @@ cmd_vf_max_bw_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -1083,6 +1116,7 @@ cmd_vf_tc_min_bw_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_vf_tc_bw_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t tc_num; uint8_t bw[16]; int ret = -ENOTSUP; @@ -1108,7 +1142,9 @@ cmd_vf_tc_min_bw_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -1137,6 +1173,7 @@ cmd_vf_tc_max_bw_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_vf_tc_bw_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = -ENOTSUP; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) @@ -1158,7 +1195,9 @@ cmd_vf_tc_max_bw_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -1188,6 +1227,7 @@ cmd_strict_link_prio_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_vf_tc_bw_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = -ENOTSUP; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) @@ -1207,7 +1247,9 @@ cmd_strict_link_prio_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -1912,6 +1954,7 @@ cmd_pctype_mapping_reset_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_pctype_mapping_reset_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = -ENOTSUP; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) @@ -1928,7 +1971,9 @@ cmd_pctype_mapping_reset_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -1984,6 +2029,7 @@ cmd_pctype_mapping_get_parsed(void *parsed_result, int ret = -ENOTSUP; struct rte_pmd_i40e_flow_type_mapping mapping[RTE_PMD_I40E_FLOW_TYPE_MAX]; + char errmsg[RTE_STRERR_BUFSIZE]; int i, j, first_pctype; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) @@ -2000,7 +2046,9 @@ cmd_pctype_mapping_get_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); return; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); return; } @@ -2085,6 +2133,7 @@ cmd_pctype_mapping_update_parsed(void *parsed_result, unsigned int i; unsigned int nb_item; unsigned int pctype_list[RTE_PMD_I40E_PCTYPE_MAX]; + char errmsg[RTE_STRERR_BUFSIZE]; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; @@ -2111,7 +2160,9 @@ cmd_pctype_mapping_update_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -2170,6 +2221,7 @@ cmd_ptype_mapping_get_parsed(void *parsed_result, int ret = -ENOTSUP; int max_ptype_num = 256; struct rte_pmd_i40e_ptype_mapping mapping[max_ptype_num]; + char errmsg[RTE_STRERR_BUFSIZE]; uint16_t count; int i; @@ -2191,7 +2243,9 @@ cmd_ptype_mapping_get_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } if (!ret) { @@ -2257,6 +2311,7 @@ cmd_ptype_mapping_replace_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_ptype_mapping_replace_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = -ENOTSUP; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) @@ -2280,7 +2335,9 @@ cmd_ptype_mapping_replace_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -2331,6 +2388,7 @@ cmd_ptype_mapping_reset_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_ptype_mapping_reset_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = -ENOTSUP; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) @@ -2347,7 +2405,9 @@ cmd_ptype_mapping_reset_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -2404,6 +2464,7 @@ cmd_ptype_mapping_update_parsed(void *parsed_result, struct cmd_ptype_mapping_update_result *res = parsed_result; int ret = -ENOTSUP; struct rte_pmd_i40e_ptype_mapping mapping; + char errmsg[RTE_STRERR_BUFSIZE]; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; @@ -2427,7 +2488,9 @@ cmd_ptype_mapping_update_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } From patchwork Mon Nov 4 11:10:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147938 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 4E43745C76; Mon, 4 Nov 2024 12:14:17 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 23A8642799; Mon, 4 Nov 2024 12:11:22 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 89C6740E27 for ; Mon, 4 Nov 2024 12:10:45 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.105]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Xhpbr3W7Zzfdh5; Mon, 4 Nov 2024 19:08:08 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 6EA151402C8; Mon, 4 Nov 2024 19:10:44 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:44 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 35/52] net/ice: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:20 +0800 Message-ID: <20241104111037.3632161-36-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/ice/ice_testpmd.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/net/ice/ice_testpmd.c b/drivers/net/ice/ice_testpmd.c index 98c02d68c6..03ec3e0adc 100644 --- a/drivers/net/ice/ice_testpmd.c +++ b/drivers/net/ice/ice_testpmd.c @@ -38,6 +38,7 @@ cmd_ddp_dump_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_ddp_dump_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t *buff; uint32_t size; int ret = -ENOTSUP; @@ -59,9 +60,11 @@ cmd_ddp_dump_parsed(void *parsed_result, "dump DDP runtime configure.\n"); break; default: + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); fprintf(stderr, "Failed to dump DDP runtime configure," - " error: (%s)\n", strerror(-ret)); + " error: (%s)\n", errmsg); } } free(buff); @@ -105,6 +108,7 @@ cmd_ddp_dump_switch_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_ddp_dump_switch_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t *buff; uint32_t size; int ret = -ENOTSUP; @@ -126,9 +130,11 @@ cmd_ddp_dump_switch_parsed(void *parsed_result, "dump DDP switch runtime configure.\n"); break; default: + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); fprintf(stderr, "Failed to dump DDP switch runtime configure," - " error: (%s)\n", strerror(-ret)); + " error: (%s)\n", rte_strerror(-ret)); } } free(buff); From patchwork Mon Nov 4 11:10:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147934 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 0998F45C76; Mon, 4 Nov 2024 12:13:51 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7E57242789; Mon, 4 Nov 2024 12:11:16 +0100 (CET) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) by mails.dpdk.org (Postfix) with ESMTP id EA5A040E30 for ; Mon, 4 Nov 2024 12:10:45 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.234]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4XhpYZ4Z2qz1JB6J; Mon, 4 Nov 2024 19:06:10 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 955701401F3; Mon, 4 Nov 2024 19:10:44 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:44 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 36/52] net/ixgbe: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:21 +0800 Message-ID: <20241104111037.3632161-37-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/ixgbe/ixgbe_testpmd.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_testpmd.c b/drivers/net/ixgbe/ixgbe_testpmd.c index e0d161eafe..d019a0d6fd 100644 --- a/drivers/net/ixgbe/ixgbe_testpmd.c +++ b/drivers/net/ixgbe/ixgbe_testpmd.c @@ -122,6 +122,7 @@ cmd_set_vf_split_drop_en_parsed(void *parsed_result, struct cmd_vf_split_drop_en_result *res = parsed_result; int ret = -ENOTSUP; int is_on = (strcmp(res->on_off, "on") == 0) ? 1 : 0; + char errmsg[RTE_STRERR_BUFSIZE]; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) return; @@ -141,7 +142,9 @@ cmd_set_vf_split_drop_en_parsed(void *parsed_result, fprintf(stderr, "not supported on port %d\n", res->port_id); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -215,6 +218,7 @@ cmd_set_macsec_offload_on_parsed(void *parsed_result, int en = (strcmp(res->en_on_off, "on") == 0) ? 1 : 0; int rp = (strcmp(res->rp_on_off, "on") == 0) ? 1 : 0; struct rte_eth_dev_info dev_info; + char errmsg[RTE_STRERR_BUFSIZE]; if (port_id_is_invalid(port_id, ENABLED_WARN)) return; @@ -243,7 +247,9 @@ cmd_set_macsec_offload_on_parsed(void *parsed_result, fprintf(stderr, "not supported on port %d\n", port_id); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -300,6 +306,7 @@ cmd_set_macsec_offload_off_parsed(void *parsed_result, int ret = -ENOTSUP; struct rte_eth_dev_info dev_info; portid_t port_id = res->port_id; + char errmsg[RTE_STRERR_BUFSIZE]; if (port_id_is_invalid(port_id, ENABLED_WARN)) return; @@ -327,7 +334,9 @@ cmd_set_macsec_offload_off_parsed(void *parsed_result, fprintf(stderr, "not supported on port %d\n", port_id); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -386,6 +395,7 @@ cmd_set_macsec_sc_parsed(void *parsed_result, struct cmd_macsec_sc_result *res = parsed_result; int ret = -ENOTSUP; int is_tx = (strcmp(res->tx_rx, "tx") == 0) ? 1 : 0; + char errmsg[RTE_STRERR_BUFSIZE]; ret = is_tx ? rte_pmd_ixgbe_macsec_config_txsc(res->port_id, @@ -402,7 +412,9 @@ cmd_set_macsec_sc_parsed(void *parsed_result, fprintf(stderr, "not supported on port %d\n", res->port_id); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -471,6 +483,7 @@ cmd_set_macsec_sa_parsed(void *parsed_result, struct cmd_macsec_sa_result *res = parsed_result; int ret = -ENOTSUP; int is_tx = (strcmp(res->tx_rx, "tx") == 0) ? 1 : 0; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t key[16] = { 0 }; uint8_t xdgt0; uint8_t xdgt1; @@ -510,7 +523,9 @@ cmd_set_macsec_sa_parsed(void *parsed_result, fprintf(stderr, "not supported on port %d\n", res->port_id); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -565,6 +580,7 @@ cmd_tc_min_bw_parsed(void *parsed_result, __rte_unused struct cmdline *cl, __rte_unused void *data) { struct cmd_vf_tc_bw_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_port *port; uint8_t tc_num; uint8_t bw[16]; @@ -599,7 +615,9 @@ cmd_tc_min_bw_parsed(void *parsed_result, fprintf(stderr, "function not implemented\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } From patchwork Mon Nov 4 11:10:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147931 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 D1BEC45C76; Mon, 4 Nov 2024 12:13:30 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 91FE04114B; Mon, 4 Nov 2024 12:11:12 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 6079440E3E for ; Mon, 4 Nov 2024 12:10:45 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.162.254]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Xhpbr5rmLzfdh6; Mon, 4 Nov 2024 19:08:08 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id C036B180105; Mon, 4 Nov 2024 19:10:44 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:44 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 37/52] net/memif: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:22 +0800 Message-ID: <20241104111037.3632161-38-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/memif/memif_socket.c | 10 +++++-- drivers/net/memif/rte_eth_memif.c | 43 ++++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/drivers/net/memif/memif_socket.c b/drivers/net/memif/memif_socket.c index 649f8d0e61..0bd4209920 100644 --- a/drivers/net/memif/memif_socket.c +++ b/drivers/net/memif/memif_socket.c @@ -57,6 +57,7 @@ memif_msg_send(int fd, memif_msg_t *msg, int afd) static int memif_msg_send_from_queue(struct memif_control_channel *cc) { + char errmsg[RTE_STRERR_BUFSIZE]; ssize_t size; int ret = 0; struct memif_msg_queue_elt *e; @@ -71,7 +72,9 @@ memif_msg_send_from_queue(struct memif_control_channel *cc) size = memif_msg_send(rte_intr_fd_get(cc->intr_handle), &e->msg, e->fd); if (size != sizeof(memif_msg_t)) { - MIF_LOG(ERR, "sendmsg fail: %s.", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + MIF_LOG(ERR, "sendmsg fail: %s.", errmsg); ret = -1; } else { MIF_LOG(DEBUG, "Sent msg type %u.", e->msg.type); @@ -891,6 +894,7 @@ memif_listener_handler(void *arg) static struct memif_socket * memif_socket_create(char *key, uint8_t listener, bool is_abstract, uid_t owner_uid, gid_t owner_gid) { + char errmsg[RTE_STRERR_BUFSIZE]; struct memif_socket *sock; struct sockaddr_un un = { 0 }; uint32_t sunlen; @@ -975,7 +979,9 @@ memif_socket_create(char *key, uint8_t listener, bool is_abstract, uid_t owner_u return sock; error: - MIF_LOG(ERR, "Failed to setup socket %s: %s", key, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + MIF_LOG(ERR, "Failed to setup socket %s: %s", key, errmsg); if (sock != NULL) { rte_intr_instance_free(sock->intr_handle); rte_free(sock); diff --git a/drivers/net/memif/rte_eth_memif.c b/drivers/net/memif/rte_eth_memif.c index cd722f254f..cdc1e0ced7 100644 --- a/drivers/net/memif/rte_eth_memif.c +++ b/drivers/net/memif/rte_eth_memif.c @@ -648,6 +648,7 @@ eth_memif_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) uint64_t a; ssize_t size; struct rte_eth_link link; + char errmsg[RTE_STRERR_BUFSIZE]; if (unlikely((pmd->flags & ETH_MEMIF_FLAG_CONNECTED) == 0)) return 0; @@ -806,8 +807,10 @@ eth_memif_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) size = write(rte_intr_fd_get(mq->intr_handle), &a, sizeof(a)); if (unlikely(size < 0)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); MIF_LOG(WARNING, - "Failed to send interrupt. %s", strerror(errno)); + "Failed to send interrupt. %s", errmsg); } } @@ -863,6 +866,7 @@ eth_memif_tx_zc(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) rte_eth_devices[mq->in_port].process_private; memif_ring_t *ring = memif_get_ring_from_queue(proc_private, mq); uint16_t slot, n_free, ring_size, mask, n_tx_pkts = 0; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_eth_link link; if (unlikely((pmd->flags & ETH_MEMIF_FLAG_CONNECTED) == 0)) @@ -957,8 +961,10 @@ eth_memif_tx_zc(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) ssize_t size = write(rte_intr_fd_get(mq->intr_handle), &a, sizeof(a)); if (unlikely(size < 0)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); MIF_LOG(WARNING, - "Failed to send interrupt. %s", strerror(errno)); + "Failed to send interrupt. %s", errmsg); } } @@ -1047,6 +1053,7 @@ memif_region_init_shm(struct rte_eth_dev *dev, uint8_t has_buffers) struct pmd_internals *pmd = dev->data->dev_private; struct pmd_process_private *proc_private = dev->process_private; char shm_name[ETH_MEMIF_SHM_NAME_SIZE]; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = 0; struct memif_region *r; @@ -1080,27 +1087,35 @@ memif_region_init_shm(struct rte_eth_dev *dev, uint8_t has_buffers) r->fd = memfd_create(shm_name, MFD_ALLOW_SEALING); if (r->fd < 0) { - MIF_LOG(ERR, "Failed to create shm file: %s.", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + MIF_LOG(ERR, "Failed to create shm file: %s.", errmsg); ret = -1; goto error; } ret = fcntl(r->fd, F_ADD_SEALS, F_SEAL_SHRINK); if (ret < 0) { - MIF_LOG(ERR, "Failed to add seals to shm file: %s.", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + MIF_LOG(ERR, "Failed to add seals to shm file: %s.", errmsg); goto error; } ret = ftruncate(r->fd, r->region_size); if (ret < 0) { - MIF_LOG(ERR, "Failed to truncate shm file: %s.", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + MIF_LOG(ERR, "Failed to truncate shm file: %s.", errmsg); goto error; } r->addr = mmap(NULL, r->region_size, PROT_READ | PROT_WRITE, MAP_SHARED, r->fd, 0); if (r->addr == MAP_FAILED) { - MIF_LOG(ERR, "Failed to mmap shm region: %s.", strerror(ret)); + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); + MIF_LOG(ERR, "Failed to mmap shm region: %s.", errmsg); ret = -1; goto error; } @@ -1204,6 +1219,7 @@ static int memif_init_queues(struct rte_eth_dev *dev) { struct pmd_internals *pmd = dev->data->dev_private; + char errmsg[RTE_STRERR_BUFSIZE]; struct memif_queue *mq; int i; @@ -1219,9 +1235,11 @@ memif_init_queues(struct rte_eth_dev *dev) return -rte_errno; if (rte_intr_fd_get(mq->intr_handle) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); MIF_LOG(WARNING, "Failed to create eventfd for tx queue %d: %s.", i, - strerror(errno)); + errmsg); } mq->buffers = NULL; if (pmd->flags & ETH_MEMIF_FLAG_ZERO_COPY) { @@ -1243,9 +1261,11 @@ memif_init_queues(struct rte_eth_dev *dev) if (rte_intr_fd_set(mq->intr_handle, eventfd(0, EFD_NONBLOCK))) return -rte_errno; if (rte_intr_fd_get(mq->intr_handle) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); MIF_LOG(WARNING, "Failed to create eventfd for rx queue %d: %s.", i, - strerror(errno)); + errmsg); } mq->buffers = NULL; if (pmd->flags & ETH_MEMIF_FLAG_ZERO_COPY) { @@ -1285,6 +1305,7 @@ memif_connect(struct rte_eth_dev *dev) { struct pmd_internals *pmd = dev->data->dev_private; struct pmd_process_private *proc_private = dev->process_private; + char errmsg[RTE_STRERR_BUFSIZE]; struct memif_region *mr; struct memif_queue *mq; memif_ring_t *ring; @@ -1300,8 +1321,10 @@ memif_connect(struct rte_eth_dev *dev) PROT_READ | PROT_WRITE, MAP_SHARED, mr->fd, 0); if (mr->addr == MAP_FAILED) { - MIF_LOG(ERR, "mmap failed: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), + "Unknown error %d", errno); + MIF_LOG(ERR, "mmap failed: %s", errmsg); return -1; } } From patchwork Mon Nov 4 11:10:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147932 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 AEED345C76; Mon, 4 Nov 2024 12:13:38 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 368F642708; Mon, 4 Nov 2024 12:11:14 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id E37D84021F for ; Mon, 4 Nov 2024 12:10:45 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.44]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4Xhpdc10lvz20rZD; Mon, 4 Nov 2024 19:09:40 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id E6C2E1400D2; Mon, 4 Nov 2024 19:10:44 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:44 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 38/52] net/memif: use rte strerror Date: Mon, 4 Nov 2024 19:10:23 +0800 Message-ID: <20241104111037.3632161-39-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The rte_errno may be an RTE-specific error code, use rte_strerror() instead of strerror(). Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/memif/rte_eth_memif.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/memif/rte_eth_memif.c b/drivers/net/memif/rte_eth_memif.c index cdc1e0ced7..5e40d2fca1 100644 --- a/drivers/net/memif/rte_eth_memif.c +++ b/drivers/net/memif/rte_eth_memif.c @@ -2008,7 +2008,7 @@ rte_pmd_memif_probe(struct rte_vdev_device *vdev) */ if (ret < 0 && rte_errno != EEXIST) MIF_LOG(WARNING, "Failed to register mp action callback: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); /* use abstract address by default */ flags |= ETH_MEMIF_FLAG_SOCKET_ABSTRACT; From patchwork Mon Nov 4 11:10:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147956 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 3130E45C76; Mon, 4 Nov 2024 12:16:38 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4B41A42D7D; Mon, 4 Nov 2024 12:11:45 +0100 (CET) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) by mails.dpdk.org (Postfix) with ESMTP id 6C7A840E26 for ; Mon, 4 Nov 2024 12:10:47 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.44]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4XhpYb1C4jz1JB6S; Mon, 4 Nov 2024 19:06:11 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 273DA1400D2; Mon, 4 Nov 2024 19:10:45 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:44 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 39/52] net/mlx4: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:24 +0800 Message-ID: <20241104111037.3632161-40-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/mlx4/mlx4.c | 27 +++++++++++++++++++++------ drivers/net/mlx4/mlx4_rxq.c | 14 +++++++++++--- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 9c2872429f..e8872e105c 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -247,15 +247,18 @@ static int mlx4_dev_configure(struct rte_eth_dev *dev) { struct mlx4_priv *priv = dev->data->dev_private; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_flow_error error; int ret; /* Prepare internal flow rules. */ ret = mlx4_flow_sync(priv, &error); if (ret) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); ERROR("cannot set up internal flow rules (code %d, \"%s\")," " flow error type %d, cause %p, message: %s", - -ret, strerror(-ret), error.type, error.cause, + -ret, errmsg, error.type, error.cause, error.message ? error.message : "(unspecified)"); goto exit; } @@ -291,6 +294,7 @@ static int mlx4_dev_start(struct rte_eth_dev *dev) { struct mlx4_priv *priv = dev->data->dev_private; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_flow_error error; uint16_t i; int ret; @@ -301,8 +305,10 @@ mlx4_dev_start(struct rte_eth_dev *dev) priv->started = 1; ret = mlx4_rss_init(priv); if (ret) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); ERROR("%p: cannot initialize RSS resources: %s", - (void *)dev, strerror(-ret)); + (void *)dev, errmsg); goto err; } #ifdef RTE_LIBRTE_MLX4_DEBUG @@ -316,10 +322,12 @@ mlx4_dev_start(struct rte_eth_dev *dev) } ret = mlx4_flow_sync(priv, &error); if (ret) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); ERROR("%p: cannot attach flow rules (code %d, \"%s\")," " flow error type %d, cause %p, message: %s", (void *)dev, - -ret, strerror(-ret), error.type, error.cause, + -ret, errmsg, error.type, error.cause, error.message ? error.message : "(unspecified)"); goto err; } @@ -788,6 +796,7 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) unsigned int vf; int i; char ifname[IF_NAMESIZE]; + char errmsg[RTE_STRERR_BUFSIZE]; (void)pci_drv; err = mlx4_init_once(); @@ -946,7 +955,9 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) err = mlx4_glue->query_port(ctx, port, &port_attr); if (err) { err = ENODEV; - ERROR("port query failed: %s", strerror(err)); + if (strerror_r(err, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", err); + ERROR("port query failed: %s", errmsg); goto port_error; } if (port_attr.link_layer != IBV_LINK_LAYER_ETHERNET) { @@ -962,8 +973,10 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) /* Make asynchronous FD non-blocking to handle interrupts. */ err = mlx4_fd_set_non_blocking(ctx->async_fd); if (err) { + if (strerror_r(err, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", err); ERROR("cannot make asynchronous FD non-blocking: %s", - strerror(err)); + errmsg); goto port_error; } /* Allocate protection domain. */ @@ -1023,8 +1036,10 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) /* Configure the first MAC address by default. */ err = mlx4_get_mac(priv, &mac.addr_bytes); if (err) { + if (strerror_r(err, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", err); ERROR("cannot get MAC address, is mlx4_en loaded?" - " (error: %s)", strerror(err)); + " (error: %s)", errmsg); goto port_error; } INFO("port %u MAC address is " RTE_ETHER_ADDR_PRT_FMT, diff --git a/drivers/net/mlx4/mlx4_rxq.c b/drivers/net/mlx4/mlx4_rxq.c index 781ee256df..d147bcad26 100644 --- a/drivers/net/mlx4/mlx4_rxq.c +++ b/drivers/net/mlx4/mlx4_rxq.c @@ -332,6 +332,7 @@ mlx4_rss_init(struct mlx4_priv *priv) { struct rte_eth_dev *dev = ETH_DEV(priv); uint8_t log2_range = rte_log2_u32(dev->data->nb_rx_queues); + char errmsg[RTE_STRERR_BUFSIZE]; uint32_t wq_num_prev = 0; const char *msg; unsigned int i; @@ -351,9 +352,11 @@ mlx4_rss_init(struct mlx4_priv *priv) MLX4DV_SET_CTX_ATTR_LOG_WQS_RANGE_SZ, &log2_range); if (ret) { + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); ERROR("cannot set up range size for RSS context to %u" " (for %u Rx queues), error: %s", - 1 << log2_range, dev->data->nb_rx_queues, strerror(ret)); + 1 << log2_range, dev->data->nb_rx_queues, errmsg); rte_errno = ret; return -ret; } @@ -430,8 +433,10 @@ mlx4_rss_init(struct mlx4_priv *priv) priv->rss_init = 1; return 0; error: + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); ERROR("cannot initialize common RSS resources (queue %u): %s: %s", - i, msg, strerror(ret)); + i, msg, errmsg); while (i--) { struct rxq *rxq = ETH_DEV(priv)->data->rx_queues[i]; @@ -508,6 +513,7 @@ mlx4_rxq_attach(struct rxq *rxq) uint32_t create_flags = 0; uint32_t comp_mask = 0; volatile struct mlx4_wqe_data_seg (*wqes)[]; + char errmsg[RTE_STRERR_BUFSIZE]; unsigned int i; int ret; @@ -630,8 +636,10 @@ mlx4_rxq_attach(struct rxq *rxq) claim_zero(mlx4_glue->destroy_cq(cq)); --rxq->usecnt; rte_errno = ret; + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); ERROR("error while attaching Rx queue %p: %s: %s", - (void *)rxq, msg, strerror(ret)); + (void *)rxq, msg, errmsg); priv->verbs_alloc_ctx.type = MLX4_VERBS_ALLOC_TYPE_NONE; return -ret; } From patchwork Mon Nov 4 11:10:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147939 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 9604945C76; Mon, 4 Nov 2024 12:14:22 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2BCA94279F; Mon, 4 Nov 2024 12:11:23 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 5582740E3A for ; Mon, 4 Nov 2024 12:10:46 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.194]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4Xhpdc1mHCzQsgL; Mon, 4 Nov 2024 19:09:40 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 411F51400F4; Mon, 4 Nov 2024 19:10:45 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:45 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 40/52] net/mlx4: use rte strerror Date: Mon, 4 Nov 2024 19:10:25 +0800 Message-ID: <20241104111037.3632161-41-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The rte_errno may be an RTE-specific error code, use rte_strerror() instead of strerror(). Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/mlx4/mlx4.c | 2 +- drivers/net/mlx4/mlx4_ethdev.c | 18 +++++++++--------- drivers/net/mlx4/mlx4_rxq.c | 4 ++-- drivers/net/mlx4/mlx4_txq.c | 10 +++++----- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index e8872e105c..c28392bd16 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -802,7 +802,7 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) err = mlx4_init_once(); if (err) { ERROR("unable to init PMD global data: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); return -rte_errno; } MLX4_ASSERT(pci_drv == &mlx4_driver); diff --git a/drivers/net/mlx4/mlx4_ethdev.c b/drivers/net/mlx4/mlx4_ethdev.c index f11c6b4373..d52d2f5511 100644 --- a/drivers/net/mlx4/mlx4_ethdev.c +++ b/drivers/net/mlx4/mlx4_ethdev.c @@ -373,7 +373,7 @@ mlx4_rxmode_toggle(struct rte_eth_dev *dev, enum rxmode_toggle toggle) ERROR("cannot toggle %s mode (code %d, \"%s\")," " flow error type %d, cause %p, message: %s", - mode, rte_errno, strerror(rte_errno), error.type, error.cause, + mode, rte_errno, rte_strerror(rte_errno), error.type, error.cause, error.message ? error.message : "(unspecified)"); return ret; } @@ -462,7 +462,7 @@ mlx4_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index) ERROR("failed to synchronize flow rules after removing MAC address" " at index %d (code %d, \"%s\")," " flow error type %d, cause %p, message: %s", - index, rte_errno, strerror(rte_errno), error.type, error.cause, + index, rte_errno, rte_strerror(rte_errno), error.type, error.cause, error.message ? error.message : "(unspecified)"); } @@ -501,7 +501,7 @@ mlx4_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr, ERROR("failed to synchronize flow rules after adding MAC address" " at index %d (code %d, \"%s\")," " flow error type %d, cause %p, message: %s", - index, rte_errno, strerror(rte_errno), error.type, error.cause, + index, rte_errno, rte_strerror(rte_errno), error.type, error.cause, error.message ? error.message : "(unspecified)"); return ret; } @@ -558,7 +558,7 @@ mlx4_set_mc_addr_list(struct rte_eth_dev *dev, struct rte_ether_addr *list, return 0; ERROR("failed to synchronize flow rules after modifying MC list," " (code %d, \"%s\"), flow error type %d, cause %p, message: %s", - rte_errno, strerror(rte_errno), error.type, error.cause, + rte_errno, rte_strerror(rte_errno), error.type, error.cause, error.message ? error.message : "(unspecified)"); return ret; } @@ -600,7 +600,7 @@ mlx4_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on) " (code %d, \"%s\"), " " flow error type %d, cause %p, message: %s", on ? "enabling" : "disabling", vlan_id, - rte_errno, strerror(rte_errno), error.type, error.cause, + rte_errno, rte_strerror(rte_errno), error.type, error.cause, error.message ? error.message : "(unspecified)"); return ret; } @@ -807,7 +807,7 @@ mlx4_link_update(struct rte_eth_dev *dev, int wait_to_complete) } (void)wait_to_complete; if (mlx4_ifreq(priv, SIOCGIFFLAGS, &ifr)) { - WARN("ioctl(SIOCGIFFLAGS) failed: %s", strerror(rte_errno)); + WARN("ioctl(SIOCGIFFLAGS) failed: %s", rte_strerror(rte_errno)); return -rte_errno; } memset(&dev_link, 0, sizeof(dev_link)); @@ -816,7 +816,7 @@ mlx4_link_update(struct rte_eth_dev *dev, int wait_to_complete) ifr.ifr_data = (void *)&edata; if (mlx4_ifreq(priv, SIOCETHTOOL, &ifr)) { WARN("ioctl(SIOCETHTOOL, ETHTOOL_GSET) failed: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); return -rte_errno; } link_speed = ethtool_cmd_speed(&edata); @@ -858,7 +858,7 @@ mlx4_flow_ctrl_get(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) ret = rte_errno; WARN("ioctl(SIOCETHTOOL, ETHTOOL_GPAUSEPARAM)" " failed: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); goto out; } fc_conf->autoneg = ethpause.autoneg; @@ -913,7 +913,7 @@ mlx4_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) ret = rte_errno; WARN("ioctl(SIOCETHTOOL, ETHTOOL_SPAUSEPARAM)" " failed: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); goto out; } ret = 0; diff --git a/drivers/net/mlx4/mlx4_rxq.c b/drivers/net/mlx4/mlx4_rxq.c index d147bcad26..6716038e46 100644 --- a/drivers/net/mlx4/mlx4_rxq.c +++ b/drivers/net/mlx4/mlx4_rxq.c @@ -890,13 +890,13 @@ mlx4_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, rte_errno = ENOMEM; ERROR("%p: Rx interrupt completion channel creation" " failure: %s", - (void *)dev, strerror(rte_errno)); + (void *)dev, rte_strerror(rte_errno)); goto error; } if (mlx4_fd_set_non_blocking(rxq->channel->fd) < 0) { ERROR("%p: unable to make Rx interrupt completion" " channel non-blocking: %s", - (void *)dev, strerror(rte_errno)); + (void *)dev, rte_strerror(rte_errno)); goto error; } } diff --git a/drivers/net/mlx4/mlx4_txq.c b/drivers/net/mlx4/mlx4_txq.c index 0db2e55bef..f08c152d5e 100644 --- a/drivers/net/mlx4/mlx4_txq.c +++ b/drivers/net/mlx4/mlx4_txq.c @@ -411,7 +411,7 @@ mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, if (!txq->cq) { rte_errno = ENOMEM; ERROR("%p: CQ creation failure: %s", - (void *)dev, strerror(rte_errno)); + (void *)dev, rte_strerror(rte_errno)); goto error; } qp_init_attr = (struct ibv_qp_init_attr){ @@ -431,7 +431,7 @@ mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, if (!txq->qp) { rte_errno = errno ? errno : EINVAL; ERROR("%p: QP creation failure: %s", - (void *)dev, strerror(rte_errno)); + (void *)dev, rte_strerror(rte_errno)); goto error; } txq->max_inline = qp_init_attr.cap.max_inline_data; @@ -445,7 +445,7 @@ mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, if (ret) { rte_errno = ret; ERROR("%p: QP state to IBV_QPS_INIT failed: %s", - (void *)dev, strerror(rte_errno)); + (void *)dev, rte_strerror(rte_errno)); goto error; } ret = mlx4_glue->modify_qp @@ -457,7 +457,7 @@ mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, if (ret) { rte_errno = ret; ERROR("%p: QP state to IBV_QPS_RTR failed: %s", - (void *)dev, strerror(rte_errno)); + (void *)dev, rte_strerror(rte_errno)); goto error; } ret = mlx4_glue->modify_qp @@ -469,7 +469,7 @@ mlx4_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc, if (ret) { rte_errno = ret; ERROR("%p: QP state to IBV_QPS_RTS failed: %s", - (void *)dev, strerror(rte_errno)); + (void *)dev, rte_strerror(rte_errno)); goto error; } /* Retrieve device queue information. */ From patchwork Mon Nov 4 11:10:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147941 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 F2C3245C76; Mon, 4 Nov 2024 12:14:35 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DFA61410F2; Mon, 4 Nov 2024 12:11:25 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 9B53A4021F for ; Mon, 4 Nov 2024 12:10:46 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.48]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4XhpcC5Tpcz10PZ2; Mon, 4 Nov 2024 19:08:27 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 6F72B180064; Mon, 4 Nov 2024 19:10:45 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:45 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 41/52] net/mlx5: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:26 +0800 Message-ID: <20241104111037.3632161-42-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/mlx5/linux/mlx5_os.c | 5 ++- drivers/net/mlx5/linux/mlx5_socket.c | 40 ++++++++++++++++------- drivers/net/mlx5/linux/mlx5_verbs.c | 20 ++++++++---- drivers/net/mlx5/mlx5_devx.c | 9 ++++-- drivers/net/mlx5/mlx5_rxq.c | 12 ++++--- drivers/net/mlx5/mlx5_rxtx.c | 5 ++- drivers/net/mlx5/mlx5_stats.c | 5 ++- drivers/net/mlx5/mlx5_testpmd.c | 48 ++++++++++++++++++++-------- drivers/net/mlx5/windows/mlx5_os.c | 6 ++-- 9 files changed, 107 insertions(+), 43 deletions(-) diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index 0a8de88759..0ed5ba38a5 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -1147,6 +1147,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, int nl_rdma; int i; struct mlx5_indexed_pool_config icfg[RTE_DIM(default_icfg)]; + char errmsg[RTE_STRERR_BUFSIZE]; memcpy(icfg, default_icfg, sizeof(icfg)); /* Determine if this port representor is supposed to be spawned. */ @@ -1256,7 +1257,9 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, err = mlx5_glue->query_port(sh->cdev->ctx, spawn->phys_port, &port_attr); if (err) { - DRV_LOG(ERR, "port query failed: %s", strerror(err)); + if (strerror_r(err, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", err); + DRV_LOG(ERR, "port query failed: %s", errmsg); goto error; } if (port_attr.link_layer != IBV_LINK_LAYER_ETHERNET) { diff --git a/drivers/net/mlx5/linux/mlx5_socket.c b/drivers/net/mlx5/linux/mlx5_socket.c index 6ce0e59643..26c71670ca 100644 --- a/drivers/net/mlx5/linux/mlx5_socket.c +++ b/drivers/net/mlx5/linux/mlx5_socket.c @@ -54,6 +54,7 @@ mlx5_pmd_socket_handle(void *cb __rte_unused) FILE *file = NULL; struct rte_eth_dev *dev; struct rte_flow_error err; + char errmsg[RTE_STRERR_BUFSIZE]; struct mlx5_flow_dump_req *dump_req; struct mlx5_flow_dump_ack *dump_ack; @@ -61,13 +62,16 @@ mlx5_pmd_socket_handle(void *cb __rte_unused) /* Accept the connection from the client. */ conn_sock = accept(server_socket, NULL, NULL); if (conn_sock < 0) { - DRV_LOG(WARNING, "connection failed: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(WARNING, "connection failed: %s", errmsg); return; } ret = recvmsg(conn_sock, &msg, MSG_WAITALL); if (ret != sizeof(struct mlx5_flow_dump_req)) { - DRV_LOG(WARNING, "wrong message received: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(WARNING, "wrong message received: %s", errmsg); goto error; } @@ -136,9 +140,11 @@ mlx5_pmd_socket_handle(void *cb __rte_unused) do { ret = sendmsg(conn_sock, &msg, 0); } while (ret < 0 && errno == EINTR); - if (ret < 0) - DRV_LOG(WARNING, "failed to send response %s", - strerror(errno)); + if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(WARNING, "failed to send response %s", errmsg); + } error: if (conn_sock >= 0) close(conn_sock); @@ -158,6 +164,7 @@ mlx5_pmd_socket_init(void) struct sockaddr_un sun = { .sun_family = AF_UNIX, }; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; int flags; @@ -166,8 +173,9 @@ mlx5_pmd_socket_init(void) return 0; ret = socket(AF_UNIX, SOCK_STREAM, 0); if (ret < 0) { - DRV_LOG(WARNING, "Failed to open mlx5 socket: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(WARNING, "Failed to open mlx5 socket: %s", errmsg); goto error; } server_socket = ret; @@ -182,22 +190,28 @@ mlx5_pmd_socket_init(void) remove(sun.sun_path); ret = bind(server_socket, (const struct sockaddr *)&sun, sizeof(sun)); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DRV_LOG(WARNING, - "cannot bind mlx5 socket: %s", strerror(errno)); + "cannot bind mlx5 socket: %s", errmsg); goto remove; } ret = listen(server_socket, 0); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DRV_LOG(WARNING, "cannot listen on mlx5 socket: %s", - strerror(errno)); + errmsg); goto remove; } server_intr_handle = mlx5_os_interrupt_handler_create (RTE_INTR_INSTANCE_F_PRIVATE, false, server_socket, mlx5_pmd_socket_handle, NULL); if (server_intr_handle == NULL) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DRV_LOG(WARNING, "cannot register interrupt handler for mlx5 socket: %s", - strerror(errno)); + errmsg); goto remove; } return 0; @@ -207,7 +221,9 @@ mlx5_pmd_socket_init(void) claim_zero(close(server_socket)); server_socket = -1; error: - DRV_LOG(ERR, "Cannot initialize socket: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "Cannot initialize socket: %s", errmsg); return -errno; } diff --git a/drivers/net/mlx5/linux/mlx5_verbs.c b/drivers/net/mlx5/linux/mlx5_verbs.c index 454bd7c77e..1624c8bbeb 100644 --- a/drivers/net/mlx5/linux/mlx5_verbs.c +++ b/drivers/net/mlx5/linux/mlx5_verbs.c @@ -94,13 +94,16 @@ mlx5_ibv_modify_qp(struct mlx5_txq_obj *obj, enum mlx5_txq_modify_type type, .qp_state = IBV_QPS_RESET, .port_num = dev_port, }; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; if (type != MLX5_TXQ_MOD_RST2RDY) { ret = mlx5_glue->modify_qp(obj->qp, &mod, IBV_QP_STATE); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DRV_LOG(ERR, "Cannot change Tx QP state to RESET %s", - strerror(errno)); + errmsg); rte_errno = errno; return ret; } @@ -110,24 +113,27 @@ mlx5_ibv_modify_qp(struct mlx5_txq_obj *obj, enum mlx5_txq_modify_type type, mod.qp_state = IBV_QPS_INIT; ret = mlx5_glue->modify_qp(obj->qp, &mod, IBV_QP_STATE | IBV_QP_PORT); if (ret) { - DRV_LOG(ERR, "Cannot change Tx QP state to INIT %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "Cannot change Tx QP state to INIT %s", errmsg); rte_errno = errno; return ret; } mod.qp_state = IBV_QPS_RTR; ret = mlx5_glue->modify_qp(obj->qp, &mod, IBV_QP_STATE); if (ret) { - DRV_LOG(ERR, "Cannot change Tx QP state to RTR %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "Cannot change Tx QP state to RTR %s", errmsg); rte_errno = errno; return ret; } mod.qp_state = IBV_QPS_RTS; ret = mlx5_glue->modify_qp(obj->qp, &mod, IBV_QP_STATE); if (ret) { - DRV_LOG(ERR, "Cannot change Tx QP state to RTS %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "Cannot change Tx QP state to RTS %s", errmsg); rte_errno = errno; return ret; } diff --git a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c index 8ebe784000..1c6fbb597a 100644 --- a/drivers/net/mlx5/mlx5_devx.c +++ b/drivers/net/mlx5/mlx5_devx.c @@ -162,6 +162,7 @@ mlx5_txq_devx_modify(struct mlx5_txq_obj *obj, enum mlx5_txq_modify_type type, uint8_t dev_port) { struct mlx5_devx_modify_sq_attr msq_attr = { 0 }; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; if (type != MLX5_TXQ_MOD_RST2RDY) { @@ -173,8 +174,10 @@ mlx5_txq_devx_modify(struct mlx5_txq_obj *obj, enum mlx5_txq_modify_type type, msq_attr.state = MLX5_SQC_STATE_RST; ret = mlx5_devx_cmd_modify_sq(obj->sq_obj.sq, &msq_attr); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DRV_LOG(ERR, "Cannot change the Tx SQ state to RESET" - " %s", strerror(errno)); + " %s", errmsg); rte_errno = errno; return ret; } @@ -185,8 +188,10 @@ mlx5_txq_devx_modify(struct mlx5_txq_obj *obj, enum mlx5_txq_modify_type type, msq_attr.state = MLX5_SQC_STATE_RDY; ret = mlx5_devx_cmd_modify_sq(obj->sq_obj.sq, &msq_attr); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DRV_LOG(ERR, "Cannot change the Tx SQ state to READY" - " %s", strerror(errno)); + " %s", errmsg); rte_errno = errno; return ret; } diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index c6655b7db4..8ad36546b4 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -481,14 +481,16 @@ mlx5_rx_queue_stop_primary(struct rte_eth_dev *dev, uint16_t idx) struct mlx5_priv *priv = dev->data->dev_private; struct mlx5_rxq_priv *rxq = mlx5_rxq_get(dev, idx); struct mlx5_rxq_ctrl *rxq_ctrl = rxq->ctrl; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; MLX5_ASSERT(rxq != NULL && rxq_ctrl != NULL); MLX5_ASSERT(rte_eal_process_type() == RTE_PROC_PRIMARY); ret = priv->obj_ops.rxq_obj_modify(rxq, MLX5_RXQ_MOD_RDY2RST); if (ret) { - DRV_LOG(ERR, "Cannot change Rx WQ state to RESET: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "Cannot change Rx WQ state to RESET: %s", errmsg); rte_errno = errno; return ret; } @@ -567,6 +569,7 @@ mlx5_rx_queue_start_primary(struct rte_eth_dev *dev, uint16_t idx) struct mlx5_priv *priv = dev->data->dev_private; struct mlx5_rxq_priv *rxq = mlx5_rxq_get(dev, idx); struct mlx5_rxq_data *rxq_data = &rxq->ctrl->rxq; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; MLX5_ASSERT(rxq != NULL && rxq->ctrl != NULL); @@ -586,8 +589,9 @@ mlx5_rx_queue_start_primary(struct rte_eth_dev *dev, uint16_t idx) rte_io_wmb(); ret = priv->obj_ops.rxq_obj_modify(rxq, MLX5_RXQ_MOD_RST2RDY); if (ret) { - DRV_LOG(ERR, "Cannot change Rx WQ state to READY: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "Cannot change Rx WQ state to READY: %s", errmsg); rte_errno = errno; return ret; } diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index eadadcdffb..314d2d8c6b 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -394,6 +394,7 @@ mlx5_queue_state_modify_primary(struct rte_eth_dev *dev, const struct mlx5_mp_arg_queue_state_modify *sm) { int ret; + char errmsg[RTE_STRERR_BUFSIZE]; struct mlx5_priv *priv = dev->data->dev_private; if (sm->is_wq) { @@ -401,8 +402,10 @@ mlx5_queue_state_modify_primary(struct rte_eth_dev *dev, ret = priv->obj_ops.rxq_obj_modify(rxq, sm->state); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DRV_LOG(ERR, "Cannot change Rx WQ state to %u - %s", - sm->state, strerror(errno)); + sm->state, errmsg); rte_errno = errno; return ret; } diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c index f4ac58e2f9..83338dc279 100644 --- a/drivers/net/mlx5/mlx5_stats.c +++ b/drivers/net/mlx5/mlx5_stats.c @@ -243,11 +243,14 @@ mlx5_xstats_reset(struct rte_eth_dev *dev) uint16_t stats_n = 0; uint16_t stats_n_2nd = 0; bool bond_master = (priv->master && priv->pf_bond >= 0); + char errmsg[RTE_STRERR_BUFSIZE]; ret = mlx5_os_get_stats_n(dev, bond_master, &stats_n, &stats_n_2nd); if (ret < 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); DRV_LOG(ERR, "port %u cannot get stats: %s", dev->data->port_id, - strerror(-ret)); + errmsg); return ret; } if (xstats_ctrl->stats_n != stats_n || diff --git a/drivers/net/mlx5/mlx5_testpmd.c b/drivers/net/mlx5/mlx5_testpmd.c index 1bb5a89559..02fbd59582 100644 --- a/drivers/net/mlx5/mlx5_testpmd.c +++ b/drivers/net/mlx5/mlx5_testpmd.c @@ -202,6 +202,7 @@ mlx5_test_extend_devargs(char *identifier, char *extend) }; struct cmsghdr *cmsg; const char *path = mlx5_test_get_socket_path(extend + 1); + char errmsg[RTE_STRERR_BUFSIZE]; size_t len = 1; int socket_fd; int ret; @@ -214,14 +215,17 @@ mlx5_test_extend_devargs(char *identifier, char *extend) /* Initialize IPC channel. */ socket_fd = socket(AF_UNIX, SOCK_SEQPACKET, 0); if (socket_fd < 0) { - TESTPMD_LOG(ERR, "Failed to create unix socket: %s\n", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + TESTPMD_LOG(ERR, "Failed to create unix socket: %s\n", errmsg); return -1; } rte_strlcpy(un.sun_path, path, sizeof(un.sun_path)); if (connect(socket_fd, (struct sockaddr *)&un, sizeof(un)) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TESTPMD_LOG(ERR, "Failed to connect %s: %s\n", un.sun_path, - strerror(errno)); + errmsg); close(socket_fd); return -1; } @@ -231,8 +235,10 @@ mlx5_test_extend_devargs(char *identifier, char *extend) ret = sendmsg(socket_fd, &msgh, 0); } while (ret < 0 && errno == EINTR); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TESTPMD_LOG(ERR, "Failed to send request to (%s): %s\n", path, - strerror(errno)); + errmsg); close(socket_fd); return -1; } @@ -420,6 +426,7 @@ static void cmd_port_host_shaper_parsed(void *parsed_result, __rte_unused void *data) { struct cmd_port_host_shaper_result *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = 0; if ((strcmp(res->mlx5, "mlx5") == 0) && @@ -430,8 +437,11 @@ static void cmd_port_host_shaper_parsed(void *parsed_result, (strcmp(res->rate, "rate") == 0)) ret = mlx5_test_set_port_host_shaper(res->port_num, res->fr, res->rate_num); - if (ret < 0) - printf("cmd_port_host_shaper error: (%s)\n", strerror(-ret)); + if (ret < 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + printf("cmd_port_host_shaper error: (%s)\n", errmsg); + } } static cmdline_parse_token_string_t cmd_port_host_shaper_mlx5 = @@ -565,6 +575,7 @@ mlx5_cmd_map_ext_rxq_parsed(void *parsed_result, __rte_unused void *data) { struct mlx5_cmd_map_ext_rxq *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) @@ -590,7 +601,9 @@ mlx5_cmd_map_ext_rxq_parsed(void *parsed_result, res->sw_queue_id); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -642,6 +655,7 @@ mlx5_cmd_unmap_ext_rxq_parsed(void *parsed_result, __rte_unused void *data) { struct mlx5_cmd_unmap_ext_rxq *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; if (port_id_is_invalid(res->port_id, ENABLED_WARN)) @@ -663,7 +677,9 @@ mlx5_cmd_unmap_ext_rxq_parsed(void *parsed_result, fprintf(stderr, "function not implemented or supported\n"); break; default: - fprintf(stderr, "programming error: (%s)\n", strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "programming error: (%s)\n", errmsg); } } @@ -731,6 +747,7 @@ mlx5_cmd_set_flow_engine_mode_parsed(void *parsed_result, { struct mlx5_cmd_set_flow_engine_mode *res = parsed_result; enum rte_pmd_mlx5_flow_engine_mode mode; + char errmsg[RTE_STRERR_BUFSIZE]; uint32_t flag; int ret; @@ -743,13 +760,16 @@ mlx5_cmd_set_flow_engine_mode_parsed(void *parsed_result, ret = rte_pmd_mlx5_flow_engine_set_mode(mode, flag); - if (ret < 0) + if (ret < 0) { + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); fprintf(stderr, "Fail to set flow_engine to %s mode with flag 0x%x, error %s\n", mode == RTE_PMD_MLX5_FLOW_ENGINE_MODE_ACTIVE ? "active" : "standby", flag, - strerror(-ret)); - else + errmsg); + } else { TESTPMD_LOG(DEBUG, "Set %d ports flow_engine to %s mode with flag 0x%x\n", ret, mode == RTE_PMD_MLX5_FLOW_ENGINE_MODE_ACTIVE ? "active" : "standby", flag); + } } cmdline_parse_token_string_t mlx5_cmd_set_flow_engine_mode_mlx5 = @@ -1164,6 +1184,7 @@ mlx5_cmd_destroy_tlv_options_parsed(void *parsed_result, __rte_unused void *data) { struct mlx5_cmd_destroy_tlv_options *res = parsed_result; + char errmsg[RTE_STRERR_BUFSIZE]; struct mlx5_port *port; int ret; @@ -1176,8 +1197,9 @@ mlx5_cmd_destroy_tlv_options_parsed(void *parsed_result, ret = rte_pmd_mlx5_destroy_geneve_tlv_parser(port->geneve_tlv_parser_handle); if (ret < 0) { - fprintf(stderr, "Fail to destroy GENEVE TLV parser: %s\n", - strerror(-ret)); + if (strerror_r(-ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -ret); + fprintf(stderr, "Fail to destroy GENEVE TLV parser: %s\n", errmsg); return; } diff --git a/drivers/net/mlx5/windows/mlx5_os.c b/drivers/net/mlx5/windows/mlx5_os.c index 0ebd233595..8032616268 100644 --- a/drivers/net/mlx5/windows/mlx5_os.c +++ b/drivers/net/mlx5/windows/mlx5_os.c @@ -354,6 +354,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, uint16_t port_id; int i; struct mlx5_indexed_pool_config icfg[RTE_DIM(default_icfg)]; + char errmsg[RTE_STRERR_BUFSIZE]; memcpy(icfg, default_icfg, sizeof(icfg)); /* Build device name. */ @@ -381,8 +382,9 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, */ err = mlx5_glue->devx_init_showdown_event(sh->cdev->ctx); if (err) { - DRV_LOG(ERR, "failed to init showdown event: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "failed to init showdown event: %s", errmsg); goto error; } /* Allocate private eth device data. */ From patchwork Mon Nov 4 11:10:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147951 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 063C645C76; Mon, 4 Nov 2024 12:15:52 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B16174111B; Mon, 4 Nov 2024 12:11:38 +0100 (CET) Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) by mails.dpdk.org (Postfix) with ESMTP id B8FFD40E3E for ; Mon, 4 Nov 2024 12:10:46 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.105]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4XhpcD1qkwz1T9jm; Mon, 4 Nov 2024 19:08:28 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 9BCFA1402C8; Mon, 4 Nov 2024 19:10:45 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:45 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 42/52] net/mlx5: use rte strerror Date: Mon, 4 Nov 2024 19:10:27 +0800 Message-ID: <20241104111037.3632161-43-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The rte_errno may be an RTE-specific error code, use rte_strerror() instead of strerror(). Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/mlx5/hws/mlx5dr_matcher.c | 2 +- drivers/net/mlx5/linux/mlx5_ethdev_os.c | 22 +++++++++++----------- drivers/net/mlx5/linux/mlx5_os.c | 16 ++++++++-------- drivers/net/mlx5/mlx5.c | 8 ++++---- drivers/net/mlx5/mlx5_mac.c | 2 +- drivers/net/mlx5/mlx5_rxmode.c | 8 ++++---- drivers/net/mlx5/mlx5_stats.c | 2 +- drivers/net/mlx5/mlx5_testpmd.c | 10 +++++----- drivers/net/mlx5/mlx5_trigger.c | 12 ++++++------ drivers/net/mlx5/mlx5_vlan.c | 2 +- drivers/net/mlx5/windows/mlx5_ethdev_os.c | 2 +- drivers/net/mlx5/windows/mlx5_os.c | 10 +++++----- 12 files changed, 48 insertions(+), 48 deletions(-) diff --git a/drivers/net/mlx5/hws/mlx5dr_matcher.c b/drivers/net/mlx5/hws/mlx5dr_matcher.c index dfa2cd435c..063f6b871e 100644 --- a/drivers/net/mlx5/hws/mlx5dr_matcher.c +++ b/drivers/net/mlx5/hws/mlx5dr_matcher.c @@ -1516,7 +1516,7 @@ mlx5dr_match_template_create(const struct rte_flow_item items[], if (ret <= 0) { DR_LOG(ERR, "Unable to process items (%s): %s", error.message ? error.message : "unspecified", - strerror(rte_errno)); + rte_strerror(rte_errno)); goto free_template; } diff --git a/drivers/net/mlx5/linux/mlx5_ethdev_os.c b/drivers/net/mlx5/linux/mlx5_ethdev_os.c index 5d64984022..c874303722 100644 --- a/drivers/net/mlx5/linux/mlx5_ethdev_os.c +++ b/drivers/net/mlx5/linux/mlx5_ethdev_os.c @@ -314,7 +314,7 @@ mlx5_link_update_unlocked_gset(struct rte_eth_dev *dev, ret = mlx5_ifreq(dev, SIOCGIFFLAGS, &ifr); if (ret) { DRV_LOG(WARNING, "port %u ioctl(SIOCGIFFLAGS) failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); return ret; } dev_link = (struct rte_eth_link) { @@ -351,7 +351,7 @@ mlx5_link_update_unlocked_gset(struct rte_eth_dev *dev, DRV_LOG(WARNING, "port %u ioctl(SIOCETHTOOL," " ETHTOOL_GSET) failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); return ret; } } @@ -395,7 +395,7 @@ mlx5_link_update_unlocked_gs(struct rte_eth_dev *dev, ret = mlx5_ifreq(dev, SIOCGIFFLAGS, &ifr); if (ret) { DRV_LOG(WARNING, "port %u ioctl(SIOCGIFFLAGS) failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); return ret; } dev_link = (struct rte_eth_link) { @@ -430,7 +430,7 @@ mlx5_link_update_unlocked_gs(struct rte_eth_dev *dev, DRV_LOG(DEBUG, "port %u ioctl(SIOCETHTOOL," " ETHTOOL_GLINKSETTINGS) failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); return ret; } } @@ -448,7 +448,7 @@ mlx5_link_update_unlocked_gs(struct rte_eth_dev *dev, DRV_LOG(DEBUG, "port %u ioctl(SIOCETHTOOL," "ETHTOOL_GLINKSETTINGS) failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); return ret; } @@ -538,7 +538,7 @@ mlx5_dev_get_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) DRV_LOG(DEBUG, "port %u ioctl(SIOCETHTOOL, ETHTOOL_GPAUSEPARAM) failed:" " %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); return ret; } fc_conf->autoneg = ethpause.autoneg; @@ -591,7 +591,7 @@ mlx5_dev_set_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) DRV_LOG(WARNING, "port %u ioctl(SIOCETHTOOL, ETHTOOL_SPAUSEPARAM)" " failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); return ret; } return 0; @@ -666,7 +666,7 @@ mlx5_link_update_bond(struct rte_eth_dev *dev) ret = mlx5_ifreq_by_ifname(bond->ifname, SIOCGIFFLAGS, &ifr); if (ret) { DRV_LOG(WARNING, "ifname %s ioctl(SIOCGIFFLAGS) failed: %s", - bond->ifname, strerror(rte_errno)); + bond->ifname, rte_strerror(rte_errno)); return; } dev->data->dev_link.link_status = @@ -1118,7 +1118,7 @@ mlx5_get_module_info(struct rte_eth_dev *dev, ret = mlx5_ifreq(dev, SIOCETHTOOL, &ifr); if (ret) { DRV_LOG(WARNING, "port %u ioctl(SIOCETHTOOL) failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); return ret; } modinfo->type = info.type; @@ -1167,7 +1167,7 @@ int mlx5_get_module_eeprom(struct rte_eth_dev *dev, ret = mlx5_ifreq(dev, SIOCETHTOOL, &ifr); if (ret) DRV_LOG(WARNING, "port %u ioctl(SIOCETHTOOL) failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); else rte_memcpy(info->data, eeprom->data, info->length); mlx5_free(eeprom); @@ -1725,7 +1725,7 @@ mlx5_os_stats_init(struct rte_eth_dev *dev) ret = mlx5_os_read_dev_counters(dev, bond_master, xstats_ctrl->base); if (ret) DRV_LOG(ERR, "port %u cannot read device counters: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); mlx5_os_read_dev_stat(priv, "out_of_buffer", &stats_ctrl->imissed_base); stats_ctrl->imissed = 0; free: diff --git a/drivers/net/mlx5/linux/mlx5_os.c b/drivers/net/mlx5/linux/mlx5_os.c index 0ed5ba38a5..1a330dd0b7 100644 --- a/drivers/net/mlx5/linux/mlx5_os.c +++ b/drivers/net/mlx5/linux/mlx5_os.c @@ -1274,7 +1274,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, spawn->phys_port); if (err < 0) { DRV_LOG(INFO, "Failed to get netlink port state: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); err = -rte_errno; goto error; } @@ -1434,7 +1434,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, if (err) { err = rte_errno; DRV_LOG(ERR, "unable to allocate switch domain: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); goto error; } own_domain_id = 1; @@ -1525,7 +1525,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, if (err) { err = rte_errno; DRV_LOG(ERR, "Failed to process port configure: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); goto error; } eth_dev = rte_eth_dev_allocate(name); @@ -1571,7 +1571,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, DRV_LOG(ERR, "port %u cannot get MAC address, is mlx5_en" " loaded? (errno: %s)", - eth_dev->data->port_id, strerror(rte_errno)); + eth_dev->data->port_id, rte_strerror(rte_errno)); err = ENODEV; goto error; } @@ -2037,7 +2037,7 @@ mlx5_device_bond_pci_match(const char *ibdev_name, bond_info->ifname); if (ret) DRV_LOG(ERR, "unable to get bond info: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); else DRV_LOG(INFO, "PF device %u, bond device %u(%s)", ifindex, bond_info->ifindex, bond_info->ifname); @@ -2751,7 +2751,7 @@ mlx5_os_pci_probe_pf(struct mlx5_common_device *cdev, " encountering an error: %s", owner_pci.domain, owner_pci.bus, owner_pci.devid, owner_pci.function, - strerror(rte_errno)); + rte_strerror(rte_errno)); ret = -rte_errno; /* Roll back. */ while (i--) { @@ -2931,13 +2931,13 @@ mlx5_os_net_probe(struct mlx5_common_device *cdev, ret = mlx5_init_once(); if (ret) { DRV_LOG(ERR, "Unable to init PMD global data: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); return -rte_errno; } ret = mlx5_probe_again_args_validate(cdev, mkvlist); if (ret) { DRV_LOG(ERR, "Probe again parameters are not compatible : %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); return -rte_errno; } if (mlx5_dev_is_pci(cdev->dev)) diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index 52b90e6ff3..a44f86d70f 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -1506,7 +1506,7 @@ mlx5_shared_dev_ctx_args_config(struct mlx5_dev_ctx_shared *sh, mlx5_dev_args_check_handler, config); if (ret) { DRV_LOG(ERR, "Failed to process device arguments: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); return -rte_errno; } } @@ -1835,7 +1835,7 @@ mlx5_alloc_shared_dev_ctx(const struct mlx5_dev_spawn_data *spawn, err = mlx5_shared_dev_ctx_args_config(sh, mkvlist, &sh->config); if (err) { DRV_LOG(ERR, "Failed to process device configure: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); goto error; } sh->refcnt = 1; @@ -2837,7 +2837,7 @@ mlx5_port_args_config(struct mlx5_priv *priv, struct mlx5_kvargs_ctrl *mkvlist, mlx5_port_args_check_handler, config); if (ret) { DRV_LOG(ERR, "Failed to process port arguments: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); return -rte_errno; } } @@ -3068,7 +3068,7 @@ mlx5_probe_again_args_validate(struct mlx5_common_device *cdev, ret = mlx5_shared_dev_ctx_args_config(sh, mkvlist, config); if (ret) { DRV_LOG(ERR, "Failed to process device configure: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); mlx5_free(config); return ret; } diff --git a/drivers/net/mlx5/mlx5_mac.c b/drivers/net/mlx5/mlx5_mac.c index 22a756a52b..f73b7bc394 100644 --- a/drivers/net/mlx5/mlx5_mac.c +++ b/drivers/net/mlx5/mlx5_mac.c @@ -100,7 +100,7 @@ mlx5_mac_addr_remove(struct rte_eth_dev *dev, uint32_t index) ret = mlx5_traffic_restart(dev); if (ret) DRV_LOG(ERR, "port %u cannot restart traffic: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); } } diff --git a/drivers/net/mlx5/mlx5_rxmode.c b/drivers/net/mlx5/mlx5_rxmode.c index f44906e1a7..fae684defb 100644 --- a/drivers/net/mlx5/mlx5_rxmode.c +++ b/drivers/net/mlx5/mlx5_rxmode.c @@ -44,7 +44,7 @@ mlx5_promiscuous_enable(struct rte_eth_dev *dev) ret = mlx5_traffic_restart(dev); if (ret) DRV_LOG(ERR, "port %u cannot enable promiscuous mode: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); /* * rte_eth_dev_promiscuous_enable() rollback @@ -77,7 +77,7 @@ mlx5_promiscuous_disable(struct rte_eth_dev *dev) ret = mlx5_traffic_restart(dev); if (ret) DRV_LOG(ERR, "port %u cannot disable promiscuous mode: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); /* * rte_eth_dev_promiscuous_disable() rollback @@ -117,7 +117,7 @@ mlx5_allmulticast_enable(struct rte_eth_dev *dev) ret = mlx5_traffic_restart(dev); if (ret) DRV_LOG(ERR, "port %u cannot enable allmulicast mode: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); error: /* * rte_eth_allmulticast_enable() rollback @@ -150,7 +150,7 @@ mlx5_allmulticast_disable(struct rte_eth_dev *dev) ret = mlx5_traffic_restart(dev); if (ret) DRV_LOG(ERR, "port %u cannot disable allmulicast mode: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); error: /* * rte_eth_allmulticast_disable() rollback diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c index 83338dc279..ba7789287c 100644 --- a/drivers/net/mlx5/mlx5_stats.c +++ b/drivers/net/mlx5/mlx5_stats.c @@ -268,7 +268,7 @@ mlx5_xstats_reset(struct rte_eth_dev *dev) ret = mlx5_os_read_dev_counters(dev, bond_master, counters); if (ret) { DRV_LOG(ERR, "port %u cannot read device counters: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); mlx5_free(counters); return ret; } diff --git a/drivers/net/mlx5/mlx5_testpmd.c b/drivers/net/mlx5/mlx5_testpmd.c index 02fbd59582..032382a564 100644 --- a/drivers/net/mlx5/mlx5_testpmd.c +++ b/drivers/net/mlx5/mlx5_testpmd.c @@ -1128,7 +1128,7 @@ mlx5_cmd_apply_tlv_options_parsed(void *parsed_result, if (handle == NULL) { fprintf(stderr, "Fail to create GENEVE TLV parser, nb_option=%u: %s\n", - tlv_mng.nb_options, strerror(rte_errno)); + tlv_mng.nb_options, rte_strerror(rte_errno)); return; } @@ -1281,10 +1281,10 @@ mlx5_cmd_dump_sq_context_options_parsed(void *parsed_result, fprintf(stderr, "invalid port_id %u\n", res->port_id); break; case -EIO: - fprintf(stderr, "File Access Error (%s)\n", strerror(rte_errno)); + fprintf(stderr, "File Access Error (%s)\n", rte_strerror(rte_errno)); break; default: - fprintf(stderr, "Unable to dump SQ/CQ HW Context (%s)\n", strerror(rte_errno)); + fprintf(stderr, "Unable to dump SQ/CQ HW Context (%s)\n", rte_strerror(rte_errno)); } } @@ -1363,10 +1363,10 @@ mlx5_cmd_dump_rq_context_options_parsed(void *parsed_result, fprintf(stderr, "invalid port_id %u\n", res->port_id); break; case -EIO: - fprintf(stderr, "File Access Error (%s)\n", strerror(rte_errno)); + fprintf(stderr, "File Access Error (%s)\n", rte_strerror(rte_errno)); break; default: - fprintf(stderr, "Unable to dump RQ/CQ HW Context (%s)\n", strerror(rte_errno)); + fprintf(stderr, "Unable to dump RQ/CQ HW Context (%s)\n", rte_strerror(rte_errno)); } } diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c index bf836c92fc..8ac91e6c71 100644 --- a/drivers/net/mlx5/mlx5_trigger.c +++ b/drivers/net/mlx5/mlx5_trigger.c @@ -1201,14 +1201,14 @@ mlx5_dev_start(struct rte_eth_dev *dev) ret = mlx5_dev_configure_rss_reta(dev); if (ret) { DRV_LOG(ERR, "port %u reta config failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); return -rte_errno; } } ret = mlx5_txpp_start(dev); if (ret) { DRV_LOG(ERR, "port %u Tx packet pacing init failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); goto error; } if (mlx5_devx_obj_ops_en(priv->sh) && @@ -1220,7 +1220,7 @@ mlx5_dev_start(struct rte_eth_dev *dev) ret = mlx5_txq_start(dev); if (ret) { DRV_LOG(ERR, "port %u Tx queue allocation failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); goto error; } if (priv->config.std_delay_drop || priv->config.hp_delay_drop) { @@ -1244,7 +1244,7 @@ mlx5_dev_start(struct rte_eth_dev *dev) ret = mlx5_rxq_start(dev); if (ret) { DRV_LOG(ERR, "port %u Rx queue allocation failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); goto error; } /* @@ -1254,7 +1254,7 @@ mlx5_dev_start(struct rte_eth_dev *dev) ret = mlx5_hairpin_auto_bind(dev); if (ret) { DRV_LOG(ERR, "port %u hairpin auto binding failed: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); goto error; } /* Set started flag here for the following steps like control flow. */ @@ -1307,7 +1307,7 @@ mlx5_dev_start(struct rte_eth_dev *dev) ret = mlx5_flow_start_default(dev); if (ret) { DRV_LOG(DEBUG, "port %u failed to start default actions: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); goto error; } if (mlx5_dev_ctx_shared_mempool_subscribe(dev) != 0) { diff --git a/drivers/net/mlx5/mlx5_vlan.c b/drivers/net/mlx5/mlx5_vlan.c index e7161b66fe..e2914844c6 100644 --- a/drivers/net/mlx5/mlx5_vlan.c +++ b/drivers/net/mlx5/mlx5_vlan.c @@ -118,7 +118,7 @@ mlx5_vlan_strip_queue_set(struct rte_eth_dev *dev, uint16_t queue, int on) ret = priv->obj_ops.rxq_obj_modify_vlan_strip(rxq, on); if (ret) { DRV_LOG(ERR, "Port %u failed to modify object stripping mode:" - " %s", dev->data->port_id, strerror(rte_errno)); + " %s", dev->data->port_id, rte_strerror(rte_errno)); return; } /* Update related bits in RX queue. */ diff --git a/drivers/net/mlx5/windows/mlx5_ethdev_os.c b/drivers/net/mlx5/windows/mlx5_ethdev_os.c index 49f750be68..cd0a02d76b 100644 --- a/drivers/net/mlx5/windows/mlx5_ethdev_os.c +++ b/drivers/net/mlx5/windows/mlx5_ethdev_os.c @@ -221,7 +221,7 @@ mlx5_os_stats_init(struct rte_eth_dev *dev) ret = mlx5_os_read_dev_stat(priv, "out_of_buffer", &stats_ctrl->imissed_base); if (ret) DRV_LOG(ERR, "port %u cannot read device counters: %s", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); stats_ctrl->imissed = 0; } diff --git a/drivers/net/mlx5/windows/mlx5_os.c b/drivers/net/mlx5/windows/mlx5_os.c index 8032616268..24c24cf7a3 100644 --- a/drivers/net/mlx5/windows/mlx5_os.c +++ b/drivers/net/mlx5/windows/mlx5_os.c @@ -432,7 +432,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, if (err) { err = rte_errno; DRV_LOG(ERR, "unable to allocate switch domain: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); goto error; } own_domain_id = 1; @@ -442,7 +442,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, if (err) { err = rte_errno; DRV_LOG(ERR, "Failed to process port configure: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); goto error; } eth_dev = rte_eth_dev_allocate(name); @@ -485,7 +485,7 @@ mlx5_dev_spawn(struct rte_device *dpdk_dev, DRV_LOG(ERR, "port %u cannot get MAC address, is mlx5_en" " loaded? (errno: %s).", - eth_dev->data->port_id, strerror(rte_errno)); + eth_dev->data->port_id, rte_strerror(rte_errno)); err = ENODEV; goto error; } @@ -739,7 +739,7 @@ mlx5_os_mac_addr_add(struct rte_eth_dev *dev, struct rte_ether_addr *mac, DRV_LOG(ERR, "port %u cannot get MAC address, is mlx5_en" " loaded? (errno: %s)", - dev->data->port_id, strerror(rte_errno)); + dev->data->port_id, rte_strerror(rte_errno)); return rte_errno; } if (!rte_is_same_ether_addr(&lmac, mac)) { @@ -858,7 +858,7 @@ mlx5_os_net_probe(struct mlx5_common_device *cdev, ret = mlx5_init_once(); if (ret) { DRV_LOG(ERR, "unable to init PMD global data: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); return -rte_errno; } spawn.eth_dev = mlx5_dev_spawn(cdev->dev, &spawn, mkvlist); From patchwork Mon Nov 4 11:10:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147953 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 2973D45C76; Mon, 4 Nov 2024 12:16:08 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 18A4C427E5; Mon, 4 Nov 2024 12:11:41 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id DCB2A40E44 for ; Mon, 4 Nov 2024 12:10:46 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.252]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4XhpcD0kPQz10PZB; Mon, 4 Nov 2024 19:08:28 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id C0CB31800A7; Mon, 4 Nov 2024 19:10:45 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:45 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 43/52] net/qede: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:28 +0800 Message-ID: <20241104111037.3632161-44-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/qede/qede_regs.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/net/qede/qede_regs.c b/drivers/net/qede/qede_regs.c index d2ea1c9108..ca8efd796e 100644 --- a/drivers/net/qede/qede_regs.c +++ b/drivers/net/qede/qede_regs.c @@ -213,6 +213,7 @@ qede_set_fw_dump_file_name(struct qede_dev *qdev) static int qede_write_fwdump(const char *dump_file, void *dump, size_t len) { + char errmsg[RTE_STRERR_BUFSIZE]; int err = 0; FILE *f; size_t bytes; @@ -220,8 +221,10 @@ qede_write_fwdump(const char *dump_file, void *dump, size_t len) f = fopen(dump_file, "wb+"); if (!f) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); fprintf(stderr, "Can't open file %s: %s\n", - dump_file, strerror(errno)); + dump_file, errmsg); return 1; } bytes = fwrite(dump, 1, len, f); @@ -233,8 +236,10 @@ qede_write_fwdump(const char *dump_file, void *dump, size_t len) } if (fclose(f)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); fprintf(stderr, "Can't close file %s: %s\n", - dump_file, strerror(errno)); + dump_file, errmsg); err = 1; } From patchwork Mon Nov 4 11:10:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147945 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 A09A845C76; Mon, 4 Nov 2024 12:15:05 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 837EF427CB; Mon, 4 Nov 2024 12:11:31 +0100 (CET) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) by mails.dpdk.org (Postfix) with ESMTP id 0F7BE40E48 for ; Mon, 4 Nov 2024 12:10:47 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.44]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4XhpYc0LqJz1JB6Q; Mon, 4 Nov 2024 19:06:12 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 094311400D2; Mon, 4 Nov 2024 19:10:46 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:45 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 44/52] net/sfc: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:29 +0800 Message-ID: <20241104111037.3632161-45-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/sfc/sfc_flow.c | 5 +- drivers/net/sfc/sfc_flow_tunnel.c | 6 +- drivers/net/sfc/sfc_mae.c | 152 +++++++++++++++++++++++------- 3 files changed, 126 insertions(+), 37 deletions(-) diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c index 1006243539..52c5800b10 100644 --- a/drivers/net/sfc/sfc_flow.c +++ b/drivers/net/sfc/sfc_flow.c @@ -1321,6 +1321,7 @@ sfc_flow_parse_pattern(struct sfc_adapter *sa, unsigned int prev_layer = SFC_FLOW_ITEM_ANY_LAYER; boolean_t is_ifrm = B_FALSE; const struct sfc_flow_item *item; + char errmsg[RTE_STRERR_BUFSIZE]; if (pattern == NULL) { rte_flow_error_set(error, EINVAL, @@ -1396,8 +1397,10 @@ sfc_flow_parse_pattern(struct sfc_adapter *sa, rc = item->parse(pattern, parse_ctx, error); if (rc != 0) { + if (strerror_r(-rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", -rc); sfc_err(sa, "failed to parse item %s: %s", - item->name, strerror(-rc)); + item->name, errmsg); return rc; } diff --git a/drivers/net/sfc/sfc_flow_tunnel.c b/drivers/net/sfc/sfc_flow_tunnel.c index 889fee569a..9bd4d10f17 100644 --- a/drivers/net/sfc/sfc_flow_tunnel.c +++ b/drivers/net/sfc/sfc_flow_tunnel.c @@ -60,6 +60,7 @@ sfc_ft_tunnel_rule_detect(struct sfc_adapter *sa, { const struct rte_flow_action_mark *action_mark = NULL; const struct rte_flow_action_jump *action_jump = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; struct sfc_ft_ctx *ft_ctx; uint32_t flow_mark = 0; int rc = 0; @@ -118,9 +119,10 @@ sfc_ft_tunnel_rule_detect(struct sfc_adapter *sa, sfc_dbg(sa, "FT: TUNNEL: detected"); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); /* The loop above might have spotted wrong actions. */ - sfc_err(sa, "FT: TUNNEL: invalid actions: %s", - strerror(rc)); + sfc_err(sa, "FT: TUNNEL: invalid actions: %s", errmsg); goto fail; } diff --git a/drivers/net/sfc/sfc_mae.c b/drivers/net/sfc/sfc_mae.c index b0e8b02b41..dfa9b5d9a1 100644 --- a/drivers/net/sfc/sfc_mae.c +++ b/drivers/net/sfc/sfc_mae.c @@ -410,6 +410,7 @@ sfc_mae_outer_rule_enable(struct sfc_adapter *sa, efx_mae_match_spec_t *match_spec_action) { struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if (rule == NULL) @@ -427,8 +428,10 @@ sfc_mae_outer_rule_enable(struct sfc_adapter *sa, rule->encap_type, &fw_rsrc->rule_id); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to enable outer_rule=%p: %s", - rule, strerror(rc)); + rule, errmsg); return rc; } } @@ -445,7 +448,9 @@ sfc_mae_outer_rule_enable(struct sfc_adapter *sa, fw_rsrc->rule_id.id = EFX_MAE_RSRC_ID_INVALID; } - sfc_err(sa, "can't match on outer rule ID: %s", strerror(rc)); + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); + sfc_err(sa, "can't match on outer rule ID: %s", errmsg); return rc; } @@ -468,6 +473,7 @@ sfc_mae_outer_rule_disable(struct sfc_adapter *sa, { efx_mae_rule_id_t invalid_rule_id = { .id = EFX_MAE_RSRC_ID_INVALID }; struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if (rule == NULL) @@ -483,8 +489,10 @@ sfc_mae_outer_rule_disable(struct sfc_adapter *sa, rc = efx_mae_match_spec_outer_rule_id_set(match_spec_action, &invalid_rule_id); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "cannot restore match on invalid outer rule ID: %s", - strerror(rc)); + errmsg); return; } @@ -502,8 +510,10 @@ sfc_mae_outer_rule_disable(struct sfc_adapter *sa, sfc_dbg(sa, "disabled outer_rule=%p with OR_ID=0x%08x", rule, fw_rsrc->rule_id.id); } else { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to disable outer_rule=%p with OR_ID=0x%08x: %s", - rule, fw_rsrc->rule_id.id, strerror(rc)); + rule, fw_rsrc->rule_id.id, errmsg); } fw_rsrc->rule_id.id = EFX_MAE_RSRC_ID_INVALID; } @@ -600,6 +610,7 @@ sfc_mae_mac_addr_enable(struct sfc_adapter *sa, efx_mae_actions_t *aset_spec) { struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; int rc = 0; if (mac_addr == NULL) @@ -615,8 +626,10 @@ sfc_mae_mac_addr_enable(struct sfc_adapter *sa, rc = efx_mae_mac_addr_alloc(sa->nic, mac_addr->addr_bytes, &fw_rsrc->mac_id); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to enable mac_addr=%p: %s", - mac_addr, strerror(rc)); + mac_addr, errmsg); return rc; } } @@ -641,8 +654,9 @@ sfc_mae_mac_addr_enable(struct sfc_adapter *sa, fw_rsrc->mac_id.id = EFX_MAE_RSRC_ID_INVALID; } - sfc_err(sa, "cannot fill in MAC address entry ID: %s", - strerror(rc)); + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); + sfc_err(sa, "cannot fill in MAC address entry ID: %s", errmsg); return rc; } @@ -662,6 +676,7 @@ sfc_mae_mac_addr_disable(struct sfc_adapter *sa, struct sfc_mae_mac_addr *mac_addr) { struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if (mac_addr == NULL) @@ -684,8 +699,10 @@ sfc_mae_mac_addr_disable(struct sfc_adapter *sa, sfc_dbg(sa, "disabled mac_addr=%p with MAC_ID=0x%08x", mac_addr, fw_rsrc->mac_id.id); } else { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to disable mac_addr=%p with MAC_ID=0x%08x: %s", - mac_addr, fw_rsrc->mac_id.id, strerror(rc)); + mac_addr, fw_rsrc->mac_id.id, errmsg); } fw_rsrc->mac_id.id = EFX_MAE_RSRC_ID_INVALID; } @@ -795,6 +812,7 @@ sfc_mae_encap_header_update(struct sfc_adapter *sa, { const struct sfc_mae_bounce_eh *bounce_eh = &sa->mae.bounce_eh; struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; uint8_t *buf; int ret; @@ -817,8 +835,10 @@ sfc_mae_encap_header_update(struct sfc_adapter *sa, encap_header->type, buf, bounce_eh->size); if (ret != 0) { + if (strerror_r(ret, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", ret); sfc_err(sa, "failed to update encap_header=%p: %s", - encap_header, strerror(ret)); + encap_header, errmsg); rte_free(buf); return ret; } @@ -839,6 +859,7 @@ sfc_mae_encap_header_enable(struct sfc_adapter *sa, efx_mae_actions_t *action_set_spec) { struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if (encap_header == NULL) @@ -858,8 +879,10 @@ sfc_mae_encap_header_enable(struct sfc_adapter *sa, encap_header->size, &fw_rsrc->eh_id); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to enable encap_header=%p: %s", - encap_header, strerror(rc)); + encap_header, errmsg); return rc; } } @@ -873,7 +896,9 @@ sfc_mae_encap_header_enable(struct sfc_adapter *sa, fw_rsrc->eh_id.id = EFX_MAE_RSRC_ID_INVALID; } - sfc_err(sa, "can't fill in encap. header ID: %s", strerror(rc)); + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); + sfc_err(sa, "can't fill in encap. header ID: %s", errmsg); return rc; } @@ -893,6 +918,7 @@ sfc_mae_encap_header_disable(struct sfc_adapter *sa, struct sfc_mae_encap_header *encap_header) { struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if (encap_header == NULL) @@ -915,8 +941,10 @@ sfc_mae_encap_header_disable(struct sfc_adapter *sa, sfc_dbg(sa, "disabled encap_header=%p with EH_ID=0x%08x", encap_header, fw_rsrc->eh_id.id); } else { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to disable encap_header=%p with EH_ID=0x%08x: %s", - encap_header, fw_rsrc->eh_id.id, strerror(rc)); + encap_header, fw_rsrc->eh_id.id, errmsg); } fw_rsrc->eh_id.id = EFX_MAE_RSRC_ID_INVALID; } @@ -993,6 +1021,7 @@ sfc_mae_counter_enable(struct sfc_adapter *sa, struct sfc_mae_counter *counter, efx_mae_actions_t *action_set_spec) { struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if (counter == NULL) @@ -1007,8 +1036,10 @@ sfc_mae_counter_enable(struct sfc_adapter *sa, struct sfc_mae_counter *counter, rc = sfc_mae_counter_fw_rsrc_enable(sa, counter); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to enable counter=%p: %s", - counter, rte_strerror(rc)); + counter, errmsg); return rc; } } @@ -1022,8 +1053,9 @@ sfc_mae_counter_enable(struct sfc_adapter *sa, struct sfc_mae_counter *counter, fw_rsrc->counter_id.id = EFX_MAE_RSRC_ID_INVALID; } - sfc_err(sa, "cannot fill in counter ID: %s", - strerror(rc)); + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); + sfc_err(sa, "cannot fill in counter ID: %s", errmsg); return rc; } } @@ -1042,6 +1074,7 @@ static void sfc_mae_counter_disable(struct sfc_adapter *sa, struct sfc_mae_counter *counter) { struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if (counter == NULL) @@ -1066,8 +1099,10 @@ sfc_mae_counter_disable(struct sfc_adapter *sa, struct sfc_mae_counter *counter) sfc_dbg(sa, "disabled counter=%p with COUNTER_ID=0x%x-#%u", counter, counter->type, counter_id); } else { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to disable counter=%p with COUNTER_ID=0x%x-#%u: %s", - counter, counter->type, counter_id, strerror(rc)); + counter, counter->type, counter_id, errmsg); } fw_rsrc->counter_id.id = EFX_MAE_RSRC_ID_INVALID; @@ -1178,6 +1213,7 @@ sfc_mae_action_set_enable(struct sfc_adapter *sa, struct sfc_mae_mac_addr *src_mac_addr; struct sfc_mae_counter *counter; struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if (action_set == NULL) @@ -1240,8 +1276,10 @@ sfc_mae_action_set_enable(struct sfc_adapter *sa, rc = efx_mae_action_set_alloc(sa->nic, action_set->spec, &fw_rsrc->aset_id); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to enable action_set=%p: %s", - action_set, strerror(rc)); + action_set, errmsg); sfc_mae_encap_header_disable(sa, encap_header); sfc_mae_mac_addr_disable(sa, src_mac_addr); @@ -1264,6 +1302,7 @@ sfc_mae_action_set_disable(struct sfc_adapter *sa, struct sfc_mae_action_set *action_set) { struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if (action_set == NULL) @@ -1288,8 +1327,10 @@ sfc_mae_action_set_disable(struct sfc_adapter *sa, sfc_dbg(sa, "disabled action_set=%p with AS_ID=0x%08x", action_set, fw_rsrc->aset_id.id); } else { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to disable action_set=%p with AS_ID=0x%08x: %s", - action_set, fw_rsrc->aset_id.id, strerror(rc)); + action_set, fw_rsrc->aset_id.id, errmsg); } fw_rsrc->aset_id.id = EFX_MAE_RSRC_ID_INVALID; @@ -1411,6 +1452,7 @@ sfc_mae_action_set_list_enable(struct sfc_adapter *sa, struct sfc_mae_action_set_list *action_set_list) { struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; unsigned int i; unsigned int j; int rc; @@ -1444,8 +1486,10 @@ sfc_mae_action_set_list_enable(struct sfc_adapter *sa, mae->bounce_aset_ids, &fw_rsrc->aset_list_id); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to enable action_set_list=%p: %s", - action_set_list, strerror(rc)); + action_set_list, errmsg); goto fail_action_set_list_alloc; } @@ -1470,6 +1514,7 @@ sfc_mae_action_set_list_disable(struct sfc_adapter *sa, struct sfc_mae_action_set_list *action_set_list) { struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if (action_set_list == NULL) @@ -1496,9 +1541,11 @@ sfc_mae_action_set_list_disable(struct sfc_adapter *sa, sfc_dbg(sa, "disabled action_set_list=%p with ASL_ID=0x%08x", action_set_list, fw_rsrc->aset_list_id.id); } else { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to disable action_set_list=%p with ASL_ID=0x%08x: %s", action_set_list, fw_rsrc->aset_list_id.id, - strerror(rc)); + errmsg); } fw_rsrc->aset_list_id.id = EFX_MAE_RSRC_ID_INVALID; @@ -1676,6 +1723,7 @@ sfc_mae_action_rule_enable(struct sfc_adapter *sa, { const efx_mae_aset_list_id_t *asl_idp = NULL; const efx_mae_aset_id_t *as_idp = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; struct sfc_mae_fw_rsrc *fw_rsrc; int rc; @@ -1707,8 +1755,10 @@ sfc_mae_action_rule_enable(struct sfc_adapter *sa, rc = efx_mae_action_rule_insert(sa->nic, rule->match_spec, asl_idp, as_idp, &fw_rsrc->rule_id); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to enable action_rule=%p: %s", - rule, strerror(rc)); + rule, errmsg); goto fail_action_rule_insert; } @@ -1739,6 +1789,7 @@ sfc_mae_action_rule_disable(struct sfc_adapter *sa, struct sfc_mae_action_rule *rule) { struct sfc_mae_fw_rsrc *fw_rsrc; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; SFC_ASSERT(sfc_adapter_is_locked(sa)); @@ -1758,8 +1809,10 @@ sfc_mae_action_rule_disable(struct sfc_adapter *sa, sfc_dbg(sa, "disabled action_rule=%p with AR_ID=0x%08x", rule, fw_rsrc->rule_id.id); } else { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to disable action_rule=%p with AR_ID=0x%08x: %s", - rule, fw_rsrc->rule_id.id, strerror(rc)); + rule, fw_rsrc->rule_id.id, errmsg); } fw_rsrc->rule_id.id = EFX_MAE_RSRC_ID_INVALID; @@ -4385,6 +4438,7 @@ sfc_mae_rule_parse_action_mark(struct sfc_adapter *sa, const struct sfc_flow_spec_mae *spec_mae, efx_mae_actions_t *spec) { + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if (spec_mae->ft_rule_type == SFC_FT_RULE_TUNNEL) { @@ -4395,8 +4449,11 @@ sfc_mae_rule_parse_action_mark(struct sfc_adapter *sa, } rc = efx_mae_action_set_populate_mark(spec, conf->id); - if (rc != 0) - sfc_err(sa, "failed to request action MARK: %s", strerror(rc)); + if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); + sfc_err(sa, "failed to request action MARK: %s", errmsg); + } return rc; } @@ -4409,6 +4466,7 @@ sfc_mae_rule_parse_action_count(struct sfc_adapter *sa, efx_mae_actions_t *spec) { struct sfc_mae_counter counter_tmp = {}; + char errmsg[RTE_STRERR_BUFSIZE]; int rc; if ((sa->counter_rxq.state & SFC_COUNTER_RXQ_INITIALIZED) == 0) { @@ -4432,9 +4490,11 @@ sfc_mae_rule_parse_action_count(struct sfc_adapter *sa, if (spec != NULL) { rc = efx_mae_action_set_populate_count(spec); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to populate counters in MAE action set: %s", - rte_strerror(rc)); + errmsg); goto fail_populate_count; } } @@ -4555,6 +4615,7 @@ sfc_mae_rule_parse_action_pf_vf(struct sfc_adapter *sa, efx_mae_actions_t *spec) { const efx_nic_cfg_t *encp = efx_nic_cfg_get(sa->nic); + char errmsg[RTE_STRERR_BUFSIZE]; efx_mport_sel_t mport; uint32_t vf; int rc; @@ -4568,16 +4629,20 @@ sfc_mae_rule_parse_action_pf_vf(struct sfc_adapter *sa, rc = efx_mae_mport_by_pcie_function(encp->enc_pf, vf, &mport); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to convert PF %u VF %d to m-port: %s", encp->enc_pf, (vf != EFX_PCI_VF_INVALID) ? (int)vf : -1, - strerror(rc)); + errmsg); return rc; } rc = efx_mae_action_set_populate_deliver(spec, &mport); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to request action DELIVER with m-port selector 0x%08x: %s", - mport.sel, strerror(rc)); + mport.sel, errmsg); } return rc; @@ -4589,6 +4654,7 @@ sfc_mae_rule_parse_action_port_id(struct sfc_adapter *sa, efx_mae_actions_t *spec) { struct sfc_adapter_shared * const sas = sfc_sa2shared(sa); + char errmsg[RTE_STRERR_BUFSIZE]; struct sfc_mae *mae = &sa->mae; unsigned int type_mask; efx_mport_sel_t mport; @@ -4605,15 +4671,19 @@ sfc_mae_rule_parse_action_port_id(struct sfc_adapter *sa, rc = sfc_mae_switch_get_ethdev_mport(mae->switch_domain_id, port_id, type_mask, &mport); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to get m-port for the given ethdev (port_id=%u): %s", - port_id, strerror(rc)); + port_id, errmsg); return rc; } rc = efx_mae_action_set_populate_deliver(spec, &mport); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to request action DELIVER with m-port selector 0x%08x: %s", - mport.sel, strerror(rc)); + mport.sel, errmsg); } return rc; @@ -4624,6 +4694,7 @@ sfc_mae_rule_parse_action_port_representor(struct sfc_adapter *sa, const struct rte_flow_action_ethdev *conf, unsigned int type_mask, efx_mae_actions_t *spec) { + char errmsg[RTE_STRERR_BUFSIZE]; struct sfc_mae *mae = &sa->mae; efx_mport_sel_t mport; int rc; @@ -4631,15 +4702,19 @@ sfc_mae_rule_parse_action_port_representor(struct sfc_adapter *sa, rc = sfc_mae_switch_get_ethdev_mport(mae->switch_domain_id, conf->port_id, type_mask, &mport); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to get m-port for the given ethdev (port_id=%u): %s", - conf->port_id, strerror(rc)); + conf->port_id, errmsg); return rc; } rc = efx_mae_action_set_populate_deliver(spec, &mport); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to request action DELIVER with m-port selector 0x%08x: %s", - mport.sel, strerror(rc)); + mport.sel, errmsg); } return rc; @@ -4650,6 +4725,7 @@ sfc_mae_rule_parse_action_represented_port(struct sfc_adapter *sa, const struct rte_flow_action_ethdev *conf, efx_mae_actions_t *spec) { + char errmsg[RTE_STRERR_BUFSIZE]; struct sfc_mae *mae = &sa->mae; efx_mport_sel_t mport; int rc; @@ -4657,15 +4733,19 @@ sfc_mae_rule_parse_action_represented_port(struct sfc_adapter *sa, rc = sfc_mae_switch_get_entity_mport(mae->switch_domain_id, conf->port_id, &mport); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to get m-port for the given ethdev (port_id=%u): %s", - conf->port_id, strerror(rc)); + conf->port_id, errmsg); return rc; } rc = efx_mae_action_set_populate_deliver(spec, &mport); if (rc != 0) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "failed to request action DELIVER with m-port selector 0x%08x: %s", - mport.sel, strerror(rc)); + mport.sel, errmsg); } return rc; @@ -4750,6 +4830,8 @@ sfc_mae_rule_parse_action_rc(struct sfc_adapter *sa, struct rte_flow_error *error, int rc, bool custom_error) { + char errmsg[RTE_STRERR_BUFSIZE]; + if (rc == 0) { bundle->actions_mask |= (1ULL << action->type); } else if (!custom_error) { @@ -4757,8 +4839,10 @@ sfc_mae_rule_parse_action_rc(struct sfc_adapter *sa, const char *action_name = action_names[action->type]; if (action_name != NULL) { + if (strerror_r(rc, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", rc); sfc_err(sa, "action %s was rejected: %s", - action_name, strerror(rc)); + action_name, errmsg); } } rc = rte_flow_error_set(error, rc, RTE_FLOW_ERROR_TYPE_ACTION, From patchwork Mon Nov 4 11:10:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147942 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 E107845C76; Mon, 4 Nov 2024 12:14:41 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D5685427A4; Mon, 4 Nov 2024 12:11:26 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id AA5E540E43 for ; Mon, 4 Nov 2024 12:10:46 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.174]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Xhpbt1GJVzfdhD; Mon, 4 Nov 2024 19:08:10 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 22765140137; Mon, 4 Nov 2024 19:10:46 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:45 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 45/52] net/tap: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:30 +0800 Message-ID: <20241104111037.3632161-46-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/tap/rte_eth_tap.c | 51 ++++++++++++++++++++++++++--------- drivers/net/tap/tap_flow.c | 33 ++++++++++++++++++----- drivers/net/tap/tap_netlink.c | 12 +++++++-- drivers/net/tap/tap_tcmsgs.c | 12 +++++++-- 4 files changed, 85 insertions(+), 23 deletions(-) diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 650ddbd706..159d2e9c75 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -153,6 +153,7 @@ static int tap_intr_handle_set(struct rte_eth_dev *dev, int set); static int tun_alloc(struct pmd_internals *pmd, int is_keepalive, int persistent) { + char errmsg[RTE_STRERR_BUFSIZE]; struct ifreq ifr; #ifdef IFF_MULTI_QUEUE unsigned int features; @@ -196,16 +197,20 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive, int persistent) /* Set the TUN/TAP configuration and set the name if needed */ if (ioctl(fd, TUNSETIFF, (void *)&ifr) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(WARNING, "Unable to set TUNSETIFF for %s: %s", - ifr.ifr_name, strerror(errno)); + ifr.ifr_name, errmsg); goto error; } /* Keep the device after application exit */ if (persistent && ioctl(fd, TUNSETPERSIST, 1) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(WARNING, "Unable to set persist %s: %s", - ifr.ifr_name, strerror(errno)); + ifr.ifr_name, errmsg); goto error; } @@ -223,26 +228,32 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive, int persistent) */ ifr.ifr_flags = IFF_DETACH_QUEUE; if (ioctl(fd, TUNSETQUEUE, (void *)&ifr) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(WARNING, "Unable to detach keep-alive queue for %s: %s", - ifr.ifr_name, strerror(errno)); + ifr.ifr_name, errmsg); goto error; } } flags = fcntl(fd, F_GETFL); if (flags == -1) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(WARNING, "Unable to get %s current flags: %s", - ifr.ifr_name, strerror(errno)); + ifr.ifr_name, errmsg); goto error; } /* Always set the file descriptor to non-blocking */ flags |= O_NONBLOCK; if (fcntl(fd, F_SETFL, flags) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(WARNING, "Unable to set %s to nonblocking: %s", - ifr.ifr_name, strerror(errno)); + ifr.ifr_name, errmsg); goto error; } @@ -294,19 +305,25 @@ tun_alloc(struct pmd_internals *pmd, int is_keepalive, int persistent) } else { /* Enable signal on file descriptor */ if (fcntl(fd, F_SETSIG, signo) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(WARNING, "Unable to set signo %d for fd %d: %s", - signo, fd, strerror(errno)); + signo, fd, errmsg); goto error; } if (fcntl(fd, F_SETFL, flags | O_ASYNC) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(WARNING, "Unable to set fcntl flags: %s", - strerror(errno)); + errmsg); goto error; } if (fcntl(fd, F_SETOWN, getpid()) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(WARNING, "Unable to set fcntl owner: %s", - strerror(errno)); + errmsg); goto error; } } @@ -781,6 +798,7 @@ tap_ioctl(struct pmd_internals *pmd, unsigned long request, short req_flags = ifr->ifr_flags; int remote = pmd->remote_if_index && (mode == REMOTE_ONLY || mode == LOCAL_AND_REMOTE); + char errmsg[RTE_STRERR_BUFSIZE]; if (!pmd->remote_if_index && mode == REMOTE_ONLY) return 0; @@ -820,8 +838,10 @@ tap_ioctl(struct pmd_internals *pmd, unsigned long request, return 0; error: + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(DEBUG, "%s(%s) failed: %s(%d)", ifr->ifr_name, - tap_ioctl_req2str(request), strerror(errno), errno); + tap_ioctl_req2str(request), errmsg, errno); return -errno; } @@ -1913,6 +1933,7 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name, struct pmd_internals *pmd; struct pmd_process_private *process_private; const char *tuntap_name = tuntap_types[type]; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_eth_dev_data *data; struct ifreq ifr; int i; @@ -1947,9 +1968,11 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name, pmd->ioctl_sock = socket(AF_INET, SOCK_DGRAM, 0); if (pmd->ioctl_sock == -1) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, "%s Unable to get a socket for management: %s", - tuntap_name, strerror(errno)); + tuntap_name, errmsg); goto error_exit; } @@ -2110,8 +2133,10 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name, return 0; disable_rte_flow: + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, " Disabling rte flow support: %s(%d)", - strerror(errno), errno); + errmsg, errno); if (strlen(remote_iface)) { TAP_LOG(ERR, "Remote feature requires flow support."); goto error_exit; @@ -2121,8 +2146,10 @@ eth_dev_tap_create(struct rte_vdev_device *vdev, const char *tap_name, #ifdef HAVE_TCA_FLOWER error_remote: + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, " Can't set up remote feature: %s(%d)", - strerror(errno), errno); + errmsg, errno); tap_flow_implicit_flush(pmd, NULL); #endif diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c index c0e44bb1a7..01a9852bfd 100644 --- a/drivers/net/tap/tap_flow.c +++ b/drivers/net/tap/tap_flow.c @@ -1258,6 +1258,7 @@ tap_flow_create(struct rte_eth_dev *dev, { struct pmd_internals *pmd = dev->data->dev_private; struct rte_flow *remote_flow = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_flow *flow = NULL; struct tap_nlmsg *msg = NULL; int err; @@ -1300,9 +1301,11 @@ tap_flow_create(struct rte_eth_dev *dev, } err = tap_nl_recv_ack(pmd->nlsk_fd); if (err < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, "Kernel refused TC filter rule creation (%d): %s", - errno, strerror(errno)); + errno, errmsg); rte_flow_error_set(error, EEXIST, RTE_FLOW_ERROR_TYPE_HANDLE, NULL, "overlapping rules or Kernel too old for flower support"); @@ -1345,9 +1348,11 @@ tap_flow_create(struct rte_eth_dev *dev, } err = tap_nl_recv_ack(pmd->nlsk_fd); if (err < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, "Kernel refused TC filter rule creation (%d): %s", - errno, strerror(errno)); + errno, errmsg); rte_flow_error_set( error, ENOMEM, RTE_FLOW_ERROR_TYPE_HANDLE, NULL, @@ -1382,6 +1387,7 @@ tap_flow_destroy_pmd(struct pmd_internals *pmd, struct rte_flow_error *error) { struct rte_flow *remote_flow = flow->remote_flow; + char errmsg[RTE_STRERR_BUFSIZE]; int ret = 0; LIST_REMOVE(flow, next); @@ -1399,9 +1405,11 @@ tap_flow_destroy_pmd(struct pmd_internals *pmd, if (ret < 0 && errno == ENOENT) ret = 0; if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, "Kernel refused TC filter rule deletion (%d): %s", - errno, strerror(errno)); + errno, errmsg); rte_flow_error_set( error, ENOTSUP, RTE_FLOW_ERROR_TYPE_HANDLE, NULL, "couldn't receive kernel ack to our request"); @@ -1423,9 +1431,11 @@ tap_flow_destroy_pmd(struct pmd_internals *pmd, if (ret < 0 && errno == ENOENT) ret = 0; if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, "Kernel refused TC filter rule deletion (%d): %s", - errno, strerror(errno)); + errno, errmsg); rte_flow_error_set( error, ENOMEM, RTE_FLOW_ERROR_TYPE_HANDLE, NULL, "Failure trying to receive nl ack"); @@ -1578,6 +1588,7 @@ int tap_flow_implicit_create(struct pmd_internals *pmd, struct rte_flow_item_eth eth_local = { .hdr.ether_type = 0 }; unsigned int if_index = pmd->remote_if_index; struct rte_flow *remote_flow = NULL; + char errmsg[RTE_STRERR_BUFSIZE]; struct tap_nlmsg *msg = NULL; int err = 0; struct rte_flow_item items_local[2] = { @@ -1647,9 +1658,11 @@ int tap_flow_implicit_create(struct pmd_internals *pmd, /* Silently ignore re-entering existing rule */ if (errno == EEXIST) goto success; + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, "Kernel refused TC filter rule creation (%d): %s", - errno, strerror(errno)); + errno, errmsg); goto fail; } LIST_INSERT_HEAD(&pmd->implicit_flows, remote_flow, next); @@ -1734,12 +1747,15 @@ void tap_flow_bpf_destroy(struct pmd_internals *pmd __rte_unused) */ static int rss_enable(struct pmd_internals *pmd, struct rte_flow_error *error) { + char errmsg[RTE_STRERR_BUFSIZE]; int err; /* Load the BPF program (defined in tap_bpf.h from skeleton) */ pmd->rss = tap_rss__open_and_load(); if (pmd->rss == NULL) { - TAP_LOG(ERR, "Failed to load BPF object: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + TAP_LOG(ERR, "Failed to load BPF object: %s", errmsg); rte_flow_error_set(error, errno, RTE_FLOW_ERROR_TYPE_HANDLE, NULL, "BPF object could not be loaded"); return -errno; @@ -1795,6 +1811,7 @@ static int rss_add_actions(struct rte_flow *flow, struct pmd_internals *pmd, const uint8_t *key_in; uint32_t hash_type = 0; uint32_t handle = flow->msg.t.tcm_handle; + char errmsg[RTE_STRERR_BUFSIZE]; unsigned int i; int err; @@ -1868,9 +1885,11 @@ static int rss_add_actions(struct rte_flow *flow, struct pmd_internals *pmd, &handle, sizeof(handle), &rss_entry, sizeof(rss_entry), 0); if (err) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, "Failed to update BPF map entry %#x (%d): %s", - handle, errno, strerror(errno)); + handle, errno, errmsg); rte_flow_error_set( error, ENOTSUP, RTE_FLOW_ERROR_TYPE_HANDLE, NULL, "Kernel too old or not configured " diff --git a/drivers/net/tap/tap_netlink.c b/drivers/net/tap/tap_netlink.c index 8a57c9242c..bd75ca8576 100644 --- a/drivers/net/tap/tap_netlink.c +++ b/drivers/net/tap/tap_netlink.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "tap_log.h" @@ -96,9 +97,13 @@ tap_nl_init(uint32_t nl_groups) int tap_nl_final(int nlsk_fd) { + char errmsg[RTE_STRERR_BUFSIZE]; + if (close(nlsk_fd)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, "Failed to close netlink socket: %s (%d)", - strerror(errno), errno); + errmsg, errno); return -1; } return 0; @@ -122,6 +127,7 @@ tap_nl_send(int nlsk_fd, struct nlmsghdr *nh) nh->nlmsg_pid = 0; /* communication with the kernel uses pid 0 */ nh->nlmsg_seq = (uint32_t)rte_rand(); + char errmsg[RTE_STRERR_BUFSIZE]; retry: send_bytes = send(nlsk_fd, nh, nh->nlmsg_len, 0); @@ -129,8 +135,10 @@ tap_nl_send(int nlsk_fd, struct nlmsghdr *nh) if (errno == EINTR) goto retry; + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, "Failed to send netlink message: %s (%d)", - strerror(errno), errno); + errmsg, errno); return -1; } return send_bytes; diff --git a/drivers/net/tap/tap_tcmsgs.c b/drivers/net/tap/tap_tcmsgs.c index 1755b57519..5b45c3c296 100644 --- a/drivers/net/tap/tap_tcmsgs.c +++ b/drivers/net/tap/tap_tcmsgs.c @@ -8,6 +8,8 @@ #include #include +#include + #include #include #include "tap_log.h" @@ -258,12 +260,15 @@ qdisc_flush(int nlsk_fd, unsigned int ifindex) int qdisc_create_multiq(int nlsk_fd, unsigned int ifindex) { + char errmsg[RTE_STRERR_BUFSIZE]; int err = 0; err = qdisc_add_multiq(nlsk_fd, ifindex); if (err < 0 && errno != -EEXIST) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, "Could not add multiq qdisc (%d): %s", - errno, strerror(errno)); + errno, errmsg); return -1; } return 0; @@ -284,12 +289,15 @@ qdisc_create_multiq(int nlsk_fd, unsigned int ifindex) int qdisc_create_ingress(int nlsk_fd, unsigned int ifindex) { + char errmsg[RTE_STRERR_BUFSIZE]; int err = 0; err = qdisc_add_ingress(nlsk_fd, ifindex); if (err < 0 && errno != -EEXIST) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); TAP_LOG(ERR, "Could not add ingress qdisc (%d): %s", - errno, strerror(errno)); + errno, errmsg); return -1; } return 0; From patchwork Mon Nov 4 11:10:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147957 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 09BED45C76; Mon, 4 Nov 2024 12:16:52 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F0BBD42D6A; Mon, 4 Nov 2024 12:11:46 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 57E9C40E21 for ; Mon, 4 Nov 2024 12:10:47 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.162.254]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4Xhpdd27PWzQsb1; Mon, 4 Nov 2024 19:09:41 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 4D765180105; Mon, 4 Nov 2024 19:10:46 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:46 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 46/52] net/tap: use rte strerror Date: Mon, 4 Nov 2024 19:10:31 +0800 Message-ID: <20241104111037.3632161-47-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The rte_errno may be an RTE-specific error code, use rte_strerror() instead of strerror(). Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/tap/rte_eth_tap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 159d2e9c75..441200e498 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -2480,7 +2480,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev) ret = rte_mp_action_register(TAP_MP_REQ_START_RXTX, tap_mp_req_start_rxtx); if (ret < 0 && rte_errno != ENOTSUP) { TAP_LOG(ERR, "tap: Failed to register IPC callback: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); return -1; } } @@ -2540,7 +2540,7 @@ rte_pmd_tap_probe(struct rte_vdev_device *dev) ret = rte_mp_action_register(TAP_MP_KEY, tap_mp_sync_queues); if (ret < 0 && rte_errno != ENOTSUP) { TAP_LOG(ERR, "tap: Failed to register IPC callback: %s", - strerror(rte_errno)); + rte_strerror(rte_errno)); goto leave; } } From patchwork Mon Nov 4 11:10:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147954 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 D61A945C76; Mon, 4 Nov 2024 12:16:15 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2CD45427E9; Mon, 4 Nov 2024 12:11:42 +0100 (CET) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) by mails.dpdk.org (Postfix) with ESMTP id 2462D40E49 for ; Mon, 4 Nov 2024 12:10:48 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.44]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4Xhpd00mB2z1jwZT; Mon, 4 Nov 2024 19:09:08 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 731C51400D2; Mon, 4 Nov 2024 19:10:46 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:46 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 47/52] net/vhost: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:32 +0800 Message-ID: <20241104111037.3632161-48-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/vhost/rte_eth_vhost.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/net/vhost/rte_eth_vhost.c b/drivers/net/vhost/rte_eth_vhost.c index 87c05caccd..d35c13166a 100644 --- a/drivers/net/vhost/rte_eth_vhost.c +++ b/drivers/net/vhost/rte_eth_vhost.c @@ -550,6 +550,7 @@ find_internal_resource(char *ifname) static void eth_vhost_update_intr(struct rte_eth_dev *eth_dev, uint16_t rxq_idx) { + char errmsg[RTE_STRERR_BUFSIZE]; struct rte_vhost_vring vring; struct vhost_queue *vq; @@ -567,8 +568,10 @@ eth_vhost_update_intr(struct rte_eth_dev *eth_dev, uint16_t rxq_idx) /* Remove previous kickfd from proxy epoll */ if (vq->kickfd >= 0 && vq->kickfd != vring.kickfd) { if (epoll_ctl(vq->ev.data.fd, EPOLL_CTL_DEL, vq->kickfd, &vq->ev) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_LOG_LINE(DEBUG, "Failed to unregister %d from rxq-%d epoll: %s", - vq->kickfd, rxq_idx, strerror(errno)); + vq->kickfd, rxq_idx, errmsg); } else { VHOST_LOG_LINE(DEBUG, "Unregistered %d from rxq-%d epoll", vq->kickfd, rxq_idx); @@ -579,8 +582,10 @@ eth_vhost_update_intr(struct rte_eth_dev *eth_dev, uint16_t rxq_idx) /* Add new one, if valid */ if (vq->kickfd != vring.kickfd && vring.kickfd >= 0) { if (epoll_ctl(vq->ev.data.fd, EPOLL_CTL_ADD, vring.kickfd, &vq->ev) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); VHOST_LOG_LINE(ERR, "Failed to register %d in rxq-%d epoll: %s", - vring.kickfd, rxq_idx, strerror(errno)); + vring.kickfd, rxq_idx, errmsg); } else { vq->kickfd = vring.kickfd; VHOST_LOG_LINE(DEBUG, "Registered %d in rxq-%d epoll", @@ -716,6 +721,7 @@ eth_vhost_configure_intr(struct rte_eth_dev *dev) static void eth_vhost_unconfigure_intr(struct rte_eth_dev *eth_dev) { + char errmsg[RTE_STRERR_BUFSIZE]; struct vhost_queue *vq; int i; @@ -729,9 +735,11 @@ eth_vhost_unconfigure_intr(struct rte_eth_dev *eth_dev) /* Remove previous kickfd from proxy epoll */ if (vq->kickfd >= 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); if (epoll_ctl(vq->ev.data.fd, EPOLL_CTL_DEL, vq->kickfd, &vq->ev) < 0) { VHOST_LOG_LINE(DEBUG, "Failed to unregister %d from rxq-%d epoll: %s", - vq->kickfd, i, strerror(errno)); + vq->kickfd, i, errmsg); } else { VHOST_LOG_LINE(DEBUG, "Unregistered %d from rxq-%d epoll", vq->kickfd, i); From patchwork Mon Nov 4 11:10:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147944 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 4051645C76; Mon, 4 Nov 2024 12:14:59 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7EA1041141; Mon, 4 Nov 2024 12:11:30 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by mails.dpdk.org (Postfix) with ESMTP id 4061F40E15 for ; Mon, 4 Nov 2024 12:10:47 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.44]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4Xhpd017Gkz2FbqC; Mon, 4 Nov 2024 19:09:08 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id AB63D1400D2; Mon, 4 Nov 2024 19:10:46 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:46 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 48/52] net/virtio: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:33 +0800 Message-ID: <20241104111037.3632161-49-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/net/virtio/virtio_user/vhost_kernel.c | 21 +++++-- .../net/virtio/virtio_user/vhost_kernel_tap.c | 56 +++++++++++++++---- drivers/net/virtio/virtio_user/vhost_user.c | 52 ++++++++++++----- drivers/net/virtio/virtio_user/vhost_vdpa.c | 30 ++++++++-- .../net/virtio/virtio_user/virtio_user_dev.c | 26 ++++++--- drivers/net/virtio/virtio_user_ethdev.c | 21 ++++--- 6 files changed, 155 insertions(+), 51 deletions(-) diff --git a/drivers/net/virtio/virtio_user/vhost_kernel.c b/drivers/net/virtio/virtio_user/vhost_kernel.c index e42bb35935..c3ae6dd476 100644 --- a/drivers/net/virtio/virtio_user/vhost_kernel.c +++ b/drivers/net/virtio/virtio_user/vhost_kernel.c @@ -87,12 +87,15 @@ get_vhost_kernel_max_regions(void) static int vhost_kernel_ioctl(int fd, uint64_t request, void *arg) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret; ret = ioctl(fd, request, arg); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "Vhost-kernel ioctl %"PRIu64" failed (%s)", - request, strerror(errno)); + request, errmsg); return -1; } @@ -381,6 +384,7 @@ vhost_kernel_set_status(struct virtio_user_dev *dev __rte_unused, uint8_t status static int vhost_kernel_setup(struct virtio_user_dev *dev) { + char errmsg[RTE_STRERR_BUFSIZE]; struct vhost_kernel_data *data; unsigned int tap_features; unsigned int tap_flags; @@ -428,7 +432,9 @@ vhost_kernel_setup(struct virtio_user_dev *dev) for (i = 0; i < dev->max_queue_pairs; ++i) { vhostfd = open(dev->path, O_RDWR); if (vhostfd < 0) { - PMD_DRV_LOG(ERR, "fail to open %s, %s", dev->path, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "fail to open %s, %s", dev->path, errmsg); goto err_tapfds; } data->vhostfds[i] = vhostfd; @@ -505,20 +511,23 @@ vhost_kernel_destroy(struct virtio_user_dev *dev) static int vhost_kernel_set_backend(int vhostfd, int tapfd) { + char errmsg[RTE_STRERR_BUFSIZE]; struct vhost_vring_file f; f.fd = tapfd; f.index = 0; if (ioctl(vhostfd, VHOST_NET_SET_BACKEND, &f) < 0) { - PMD_DRV_LOG(ERR, "VHOST_NET_SET_BACKEND fails, %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "VHOST_NET_SET_BACKEND fails, %s", errmsg); return -1; } f.index = 1; if (ioctl(vhostfd, VHOST_NET_SET_BACKEND, &f) < 0) { - PMD_DRV_LOG(ERR, "VHOST_NET_SET_BACKEND fails, %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "VHOST_NET_SET_BACKEND fails, %s", errmsg); return -1; } diff --git a/drivers/net/virtio/virtio_user/vhost_kernel_tap.c b/drivers/net/virtio/virtio_user/vhost_kernel_tap.c index 611e2e25ec..4adc28df55 100644 --- a/drivers/net/virtio/virtio_user/vhost_kernel_tap.c +++ b/drivers/net/virtio/virtio_user/vhost_kernel_tap.c @@ -13,6 +13,7 @@ #include #include +#include #include "vhost_kernel_tap.h" #include "../virtio_logs.h" @@ -22,17 +23,22 @@ int tap_support_features(unsigned int *tap_features) { + char errmsg[RTE_STRERR_BUFSIZE]; int tapfd; tapfd = open(PATH_NET_TUN, O_RDWR); if (tapfd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "fail to open %s: %s", - PATH_NET_TUN, strerror(errno)); + PATH_NET_TUN, errmsg); return -1; } if (ioctl(tapfd, TUNGETFEATURES, tap_features) == -1) { - PMD_DRV_LOG(ERR, "TUNGETFEATURES failed: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "TUNGETFEATURES failed: %s", errmsg); close(tapfd); return -1; } @@ -44,16 +50,21 @@ tap_support_features(unsigned int *tap_features) int tap_open(const char *ifname, unsigned int r_flags, bool multi_queue) { + char errmsg[RTE_STRERR_BUFSIZE]; struct ifreq ifr; int tapfd; tapfd = open(PATH_NET_TUN, O_RDWR); if (tapfd < 0) { - PMD_DRV_LOG(ERR, "fail to open %s: %s", PATH_NET_TUN, strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "fail to open %s: %s", PATH_NET_TUN, errmsg); return -1; } if (fcntl(tapfd, F_SETFL, O_NONBLOCK) < 0) { - PMD_DRV_LOG(ERR, "fcntl tapfd failed: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "fcntl tapfd failed: %s", errmsg); close(tapfd); return -1; } @@ -66,14 +77,18 @@ tap_open(const char *ifname, unsigned int r_flags, bool multi_queue) ifr.ifr_flags |= IFF_MULTI_QUEUE; if (ioctl(tapfd, TUNSETIFF, (void *)&ifr) == -1) { if (multi_queue) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(DEBUG, "TUNSETIFF failed (will retry without IFF_MULTI_QUEUE): %s", - strerror(errno)); + errmsg); multi_queue = false; goto retry_mono_q; } - PMD_DRV_LOG(ERR, "TUNSETIFF failed: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "TUNSETIFF failed: %s", errmsg); close(tapfd); tapfd = -1; } @@ -83,12 +98,15 @@ tap_open(const char *ifname, unsigned int r_flags, bool multi_queue) int tap_get_name(int tapfd, char **name) { + char errmsg[RTE_STRERR_BUFSIZE]; struct ifreq ifr; int ret; memset(&ifr, 0, sizeof(ifr)); if (ioctl(tapfd, TUNGETIFF, (void *)&ifr) == -1) { - PMD_DRV_LOG(ERR, "TUNGETIFF failed: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "TUNGETIFF failed: %s", errmsg); return -1; } ret = asprintf(name, "%s", ifr.ifr_name); @@ -100,11 +118,14 @@ tap_get_name(int tapfd, char **name) int tap_get_flags(int tapfd, unsigned int *tap_flags) { + char errmsg[RTE_STRERR_BUFSIZE]; struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); if (ioctl(tapfd, TUNGETIFF, (void *)&ifr) == -1) { - PMD_DRV_LOG(ERR, "TUNGETIFF failed: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "TUNGETIFF failed: %s", errmsg); return -1; } *tap_flags = ifr.ifr_flags; @@ -114,13 +135,16 @@ tap_get_flags(int tapfd, unsigned int *tap_flags) int tap_set_mac(int tapfd, uint8_t *mac) { + char errmsg[RTE_STRERR_BUFSIZE]; struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); ifr.ifr_hwaddr.sa_family = ARPHRD_ETHER; memcpy(ifr.ifr_hwaddr.sa_data, mac, RTE_ETHER_ADDR_LEN); if (ioctl(tapfd, SIOCSIFHWADDR, (void *)&ifr) == -1) { - PMD_DRV_LOG(ERR, "SIOCSIFHWADDR failed: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "SIOCSIFHWADDR failed: %s", errmsg); return -1; } return 0; @@ -129,6 +153,7 @@ tap_set_mac(int tapfd, uint8_t *mac) static int vhost_kernel_tap_set_offload(int fd, uint64_t features) { + char errmsg[RTE_STRERR_BUFSIZE]; unsigned int offload = 0; if (features & (1ULL << VIRTIO_NET_F_GUEST_CSUM)) { @@ -154,8 +179,10 @@ vhost_kernel_tap_set_offload(int fd, uint64_t features) if (ioctl(fd, TUNSETOFFLOAD, offload) != 0) { offload &= ~TUN_F_UFO; if (ioctl(fd, TUNSETOFFLOAD, offload) != 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "TUNSETOFFLOAD ioctl() failed: %s", - strerror(errno)); + errmsg); return -1; } } @@ -166,6 +193,7 @@ vhost_kernel_tap_set_offload(int fd, uint64_t features) int vhost_kernel_tap_setup(int tapfd, int hdr_size, uint64_t features) { + char errmsg[RTE_STRERR_BUFSIZE]; int sndbuf = INT_MAX; int ret; @@ -175,12 +203,16 @@ vhost_kernel_tap_setup(int tapfd, int hdr_size, uint64_t features) * max_mem_regions, supported in newer version linux kernel */ if (ioctl(tapfd, TUNSETVNETHDRSZ, &hdr_size) < 0) { - PMD_DRV_LOG(ERR, "TUNSETVNETHDRSZ failed: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "TUNSETVNETHDRSZ failed: %s", errmsg); return -1; } if (ioctl(tapfd, TUNSETSNDBUF, &sndbuf) < 0) { - PMD_DRV_LOG(ERR, "TUNSETSNDBUF failed: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "TUNSETSNDBUF failed: %s", errmsg); return -1; } diff --git a/drivers/net/virtio/virtio_user/vhost_user.c b/drivers/net/virtio/virtio_user/vhost_user.c index c10252506b..3f10fb95f4 100644 --- a/drivers/net/virtio/virtio_user/vhost_user.c +++ b/drivers/net/virtio/virtio_user/vhost_user.c @@ -111,6 +111,7 @@ vhost_user_write(int fd, struct vhost_user_msg *msg, int *fds, int fd_num) struct iovec iov; size_t fd_size = fd_num * sizeof(int); char control[CMSG_SPACE(fd_size)]; + char errmsg[RTE_STRERR_BUFSIZE]; struct cmsghdr *cmsg; memset(&msgh, 0, sizeof(msgh)); @@ -135,8 +136,11 @@ vhost_user_write(int fd, struct vhost_user_msg *msg, int *fds, int fd_num) r = sendmsg(fd, &msgh, 0); } while (r < 0 && errno == EINTR); - if (r < 0) - PMD_DRV_LOG(ERR, "Failed to send msg: %s", strerror(errno)); + if (r < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "Failed to send msg: %s", errmsg); + } return r; } @@ -146,10 +150,13 @@ vhost_user_read(int fd, struct vhost_user_msg *msg) { uint32_t valid_flags = VHOST_USER_REPLY_MASK | VHOST_USER_VERSION; int ret, sz_hdr = VHOST_USER_HDR_SIZE, sz_payload; + char errmsg[RTE_STRERR_BUFSIZE]; ret = recv(fd, (void *)msg, sz_hdr, 0); if (ret < 0) { - PMD_DRV_LOG(ERR, "Failed to recv msg header: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "Failed to recv msg header: %s", errmsg); return -1; } else if (ret < sz_hdr) { PMD_DRV_LOG(ERR, "Failed to recv msg hdr: %d instead of %d.", @@ -175,7 +182,9 @@ vhost_user_read(int fd, struct vhost_user_msg *msg) if (sz_payload) { ret = recv(fd, (void *)((char *)msg + sz_hdr), sz_payload, 0); if (ret < 0) { - PMD_DRV_LOG(ERR, "Failed to recv msg payload: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "Failed to recv msg payload: %s", errmsg); return -1; } else if (ret < sz_payload) { PMD_DRV_LOG(ERR, "Failed to recv msg payload: %d instead of %u.", @@ -745,12 +754,15 @@ vhost_user_start_server(struct virtio_user_dev *dev, struct sockaddr_un *un) int ret; int flag; struct vhost_user_data *data = dev->backend_data; + char errmsg[RTE_STRERR_BUFSIZE]; int fd = data->listenfd; ret = bind(fd, (struct sockaddr *)un, sizeof(*un)); if (ret < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "failed to bind to %s: %s; remove it and try again", - dev->path, strerror(errno)); + dev->path, errmsg); return -1; } ret = listen(fd, MAX_VIRTIO_USER_BACKLOG); @@ -760,14 +772,18 @@ vhost_user_start_server(struct virtio_user_dev *dev, struct sockaddr_un *un) PMD_DRV_LOG(NOTICE, "(%s) waiting for client connection...", dev->path); data->vhostfd = accept(fd, NULL, NULL); if (data->vhostfd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "Failed to accept initial client connection (%s)", - strerror(errno)); + errmsg); return -1; } flag = fcntl(fd, F_GETFL); if (fcntl(fd, F_SETFL, flag | O_NONBLOCK) < 0) { - PMD_DRV_LOG(ERR, "fcntl failed, %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "fcntl failed, %s", errmsg); return -1; } @@ -819,6 +835,7 @@ vhost_user_setup(struct virtio_user_dev *dev) int flag; struct sockaddr_un un; struct vhost_user_data *data; + char errmsg[RTE_STRERR_BUFSIZE]; data = malloc(sizeof(*data)); if (!data) { @@ -835,15 +852,22 @@ vhost_user_setup(struct virtio_user_dev *dev) fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd < 0) { - PMD_DRV_LOG(ERR, "socket() error, %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "socket() error, %s", errmsg); goto err_data; } flag = fcntl(fd, F_GETFD); - if (flag == -1) - PMD_DRV_LOG(WARNING, "fcntl get fd failed, %s", strerror(errno)); - else if (fcntl(fd, F_SETFD, flag | FD_CLOEXEC) < 0) - PMD_DRV_LOG(WARNING, "fcntl set fd failed, %s", strerror(errno)); + if (flag == -1) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(WARNING, "fcntl get fd failed, %s", errmsg); + } else if (fcntl(fd, F_SETFD, flag | FD_CLOEXEC) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(WARNING, "fcntl set fd failed, %s", errmsg); + } memset(&un, 0, sizeof(un)); un.sun_family = AF_UNIX; @@ -857,7 +881,9 @@ vhost_user_setup(struct virtio_user_dev *dev) } } else { if (connect(fd, (struct sockaddr *)&un, sizeof(un)) < 0) { - PMD_DRV_LOG(ERR, "connect error, %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "connect error, %s", errmsg); goto err_socket; } data->vhostfd = fd; diff --git a/drivers/net/virtio/virtio_user/vhost_vdpa.c b/drivers/net/virtio/virtio_user/vhost_vdpa.c index bc3e2a9af5..ed4f4930ed 100644 --- a/drivers/net/virtio/virtio_user/vhost_vdpa.c +++ b/drivers/net/virtio/virtio_user/vhost_vdpa.c @@ -88,12 +88,15 @@ struct vhost_msg { static int vhost_vdpa_ioctl(int fd, uint64_t request, void *arg) { + char errmsg[RTE_STRERR_BUFSIZE]; int ret; ret = ioctl(fd, request, arg); if (ret) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "Vhost-vDPA ioctl %"PRIu64" failed (%s)", - request, strerror(errno)); + request, errmsg); return -1; } @@ -172,6 +175,7 @@ static int vhost_vdpa_iotlb_batch_begin(struct virtio_user_dev *dev) { struct vhost_vdpa_data *data = dev->backend_data; + char errmsg[RTE_STRERR_BUFSIZE]; struct vhost_msg msg = {}; if (!(data->protocol_features & (1ULL << VHOST_BACKEND_F_IOTLB_BATCH))) @@ -186,8 +190,10 @@ vhost_vdpa_iotlb_batch_begin(struct virtio_user_dev *dev) msg.iotlb.type = VHOST_IOTLB_BATCH_BEGIN; if (write(data->vhostfd, &msg, sizeof(msg)) != sizeof(msg)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "Failed to send IOTLB batch begin (%s)", - strerror(errno)); + errmsg); return -1; } @@ -198,6 +204,7 @@ static int vhost_vdpa_iotlb_batch_end(struct virtio_user_dev *dev) { struct vhost_vdpa_data *data = dev->backend_data; + char errmsg[RTE_STRERR_BUFSIZE]; struct vhost_msg msg = {}; if (!(data->protocol_features & (1ULL << VHOST_BACKEND_F_IOTLB_BATCH))) @@ -212,8 +219,10 @@ vhost_vdpa_iotlb_batch_end(struct virtio_user_dev *dev) msg.iotlb.type = VHOST_IOTLB_BATCH_END; if (write(data->vhostfd, &msg, sizeof(msg)) != sizeof(msg)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "Failed to send IOTLB batch end (%s)", - strerror(errno)); + errmsg); return -1; } @@ -225,6 +234,7 @@ vhost_vdpa_dma_map(struct virtio_user_dev *dev, void *addr, uint64_t iova, size_t len) { struct vhost_vdpa_data *data = dev->backend_data; + char errmsg[RTE_STRERR_BUFSIZE]; struct vhost_msg msg = {}; if (!(data->protocol_features & (1ULL << VHOST_BACKEND_F_IOTLB_MSG_V2))) { @@ -243,8 +253,10 @@ vhost_vdpa_dma_map(struct virtio_user_dev *dev, void *addr, __func__, iova, addr, len); if (write(data->vhostfd, &msg, sizeof(msg)) != sizeof(msg)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "Failed to send IOTLB update (%s)", - strerror(errno)); + errmsg); return -1; } @@ -256,6 +268,7 @@ vhost_vdpa_dma_unmap(struct virtio_user_dev *dev, __rte_unused void *addr, uint64_t iova, size_t len) { struct vhost_vdpa_data *data = dev->backend_data; + char errmsg[RTE_STRERR_BUFSIZE]; struct vhost_msg msg = {}; if (!(data->protocol_features & (1ULL << VHOST_BACKEND_F_IOTLB_MSG_V2))) { @@ -272,8 +285,10 @@ vhost_vdpa_dma_unmap(struct virtio_user_dev *dev, __rte_unused void *addr, __func__, iova, len); if (write(data->vhostfd, &msg, sizeof(msg)) != sizeof(msg)) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "Failed to send IOTLB invalidate (%s)", - strerror(errno)); + errmsg); return -1; } @@ -519,6 +534,7 @@ vhost_vdpa_set_config(struct virtio_user_dev *dev, const uint8_t *data, uint32_t static int vhost_vdpa_setup(struct virtio_user_dev *dev) { + char errmsg[RTE_STRERR_BUFSIZE]; struct vhost_vdpa_data *data; uint32_t did = (uint32_t)-1; @@ -530,8 +546,10 @@ vhost_vdpa_setup(struct virtio_user_dev *dev) data->vhostfd = open(dev->path, O_RDWR); if (data->vhostfd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "Failed to open %s: %s", - dev->path, strerror(errno)); + dev->path, errmsg); free(data); return -1; } diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c index 2997d2bd26..a4aeaa8a0b 100644 --- a/drivers/net/virtio/virtio_user/virtio_user_dev.c +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c @@ -53,20 +53,26 @@ virtio_user_uninit_notify_queue(struct virtio_user_dev *dev, uint32_t queue_sel) static int virtio_user_init_notify_queue(struct virtio_user_dev *dev, uint32_t queue_sel) { + char errmsg[RTE_STRERR_BUFSIZE]; + /* May use invalid flag, but some backend uses kickfd and * callfd as criteria to judge if dev is alive. so finally we * use real event_fd. */ dev->callfds[queue_sel] = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); if (dev->callfds[queue_sel] < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "(%s) Failed to setup callfd for queue %u: %s", - dev->path, queue_sel, strerror(errno)); + dev->path, queue_sel, errmsg); return -1; } dev->kickfds[queue_sel] = eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK); if (dev->kickfds[queue_sel] < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); PMD_DRV_LOG(ERR, "(%s) Failed to setup kickfd for queue %u: %s", - dev->path, queue_sel, strerror(errno)); + dev->path, queue_sel, errmsg); return -1; } @@ -1108,12 +1114,16 @@ static void virtio_user_control_queue_notify(struct virtqueue *vq, void *cookie) { struct virtio_user_dev *dev = cookie; + char errmsg[RTE_STRERR_BUFSIZE]; uint64_t notify_data = 1; if (!dev->notify_area) { - if (write(dev->kickfds[vq->vq_queue_index], ¬ify_data, sizeof(notify_data)) < 0) - PMD_DRV_LOG(ERR, "failed to kick backend: %s", - strerror(errno)); + if (write(dev->kickfds[vq->vq_queue_index], ¬ify_data, + sizeof(notify_data)) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "failed to kick backend: %s", errmsg); + } return; } else if (!virtio_with_feature(&dev->hw, VIRTIO_F_NOTIFICATION_DATA)) { rte_write16(vq->vq_queue_index, vq->notify_addr); @@ -1337,6 +1347,7 @@ virtio_user_dev_server_reconnect(struct virtio_user_dev *dev) int ret, old_status; struct rte_eth_dev *eth_dev = &rte_eth_devices[dev->hw.port_id]; struct virtio_hw *hw = &dev->hw; + char errmsg[RTE_STRERR_BUFSIZE]; if (!dev->ops->server_reconnect) { PMD_DRV_LOG(ERR, "(%s) Missing server reconnect callback", dev->path); @@ -1357,8 +1368,9 @@ virtio_user_dev_server_reconnect(struct virtio_user_dev *dev) virtio_set_status(hw, VIRTIO_CONFIG_STATUS_DRIVER); if (dev->ops->get_features(dev, &dev->device_features) < 0) { - PMD_INIT_LOG(ERR, "get_features failed: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_INIT_LOG(ERR, "get_features failed: %s", errmsg); return -1; } diff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c index 747dddeb2e..d8611cda28 100644 --- a/drivers/net/virtio/virtio_user_ethdev.c +++ b/drivers/net/virtio/virtio_user_ethdev.c @@ -273,6 +273,7 @@ static void virtio_user_notify_queue(struct virtio_hw *hw, struct virtqueue *vq) { struct virtio_user_dev *dev = virtio_user_get_dev(hw); + char errmsg[RTE_STRERR_BUFSIZE]; uint64_t notify_data = 1; if (hw->cvq && (virtnet_cq_to_vq(hw->cvq) == vq)) { @@ -283,9 +284,11 @@ virtio_user_notify_queue(struct virtio_hw *hw, struct virtqueue *vq) if (!dev->notify_area) { if (write(dev->kickfds[vq->vq_queue_index], ¬ify_data, - sizeof(notify_data)) < 0) - PMD_DRV_LOG(ERR, "failed to kick backend: %s", - strerror(errno)); + sizeof(notify_data)) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_DRV_LOG(ERR, "failed to kick backend: %s", errmsg); + } return; } else if (!virtio_with_feature(hw, VIRTIO_F_NOTIFICATION_DATA)) { rte_write16(vq->vq_queue_index, vq->notify_addr); @@ -407,6 +410,7 @@ get_integer_arg(const char *key __rte_unused, static uint32_t vdpa_dynamic_major_num(void) { + char errmsg[RTE_STRERR_BUFSIZE]; FILE *fp; char *line = NULL; size_t size = 0; @@ -416,8 +420,9 @@ vdpa_dynamic_major_num(void) fp = fopen("/proc/devices", "r"); if (fp == NULL) { - PMD_INIT_LOG(ERR, "Cannot open /proc/devices: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_INIT_LOG(ERR, "Cannot open /proc/devices: %s", errmsg); return UNNAMED_MAJOR; } @@ -437,14 +442,16 @@ vdpa_dynamic_major_num(void) static enum virtio_user_backend_type virtio_user_backend_type(const char *path) { + char errmsg[RTE_STRERR_BUFSIZE]; struct stat sb; if (stat(path, &sb) == -1) { if (errno == ENOENT) return VIRTIO_USER_BACKEND_VHOST_USER; - PMD_INIT_LOG(ERR, "Stat fails: %s (%s)", path, - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + PMD_INIT_LOG(ERR, "Stat fails: %s (%s)", path, errmsg); return VIRTIO_USER_BACKEND_UNKNOWN; } From patchwork Mon Nov 4 11:10:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147947 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 5953945C76; Mon, 4 Nov 2024 12:15:22 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 381EE427D3; Mon, 4 Nov 2024 12:11:34 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id CEAF740E3B for ; Mon, 4 Nov 2024 12:10:47 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.252]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4XhpcF0pzJz10PZt; Mon, 4 Nov 2024 19:08:29 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id C447E1800A7; Mon, 4 Nov 2024 19:10:46 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:46 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 49/52] raw/ifpga: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:34 +0800 Message-ID: <20241104111037.3632161-50-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/raw/ifpga/afu_pmd_n3000.c | 10 ++++++++-- drivers/raw/ifpga/base/ifpga_fme_rsu.c | 24 +++++++++++++++++++----- drivers/raw/ifpga/ifpga_rawdev.c | 5 ++++- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/drivers/raw/ifpga/afu_pmd_n3000.c b/drivers/raw/ifpga/afu_pmd_n3000.c index 6aae1b224e..d9545a3b5f 100644 --- a/drivers/raw/ifpga/afu_pmd_n3000.c +++ b/drivers/raw/ifpga/afu_pmd_n3000.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "afu_pmd_core.h" #include "afu_pmd_n3000.h" @@ -680,6 +681,7 @@ static void clear_interrupt(struct dma_afu_ctx *ctx) static int poll_interrupt(struct dma_afu_ctx *ctx) { + char errmsg[RTE_STRERR_BUFSIZE]; struct pollfd pfd = {0}; uint64_t count = 0; ssize_t bytes_read = 0; @@ -693,7 +695,9 @@ static int poll_interrupt(struct dma_afu_ctx *ctx) pfd.events = POLLIN; poll_ret = poll(&pfd, 1, DMA_TIMEOUT_MSEC); if (poll_ret < 0) { - IFPGA_RAWDEV_PMD_ERR("Error %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + IFPGA_RAWDEV_PMD_ERR("Error %s", errmsg); ret = -EFAULT; goto out; } else if (poll_ret == 0) { @@ -707,8 +711,10 @@ static int poll_interrupt(struct dma_afu_ctx *ctx) poll_ret, count); ret = 0; } else { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); IFPGA_RAWDEV_PMD_ERR("Failed %s", bytes_read > 0 ? - strerror(errno) : "zero bytes read"); + errmsg : "zero bytes read"); ret = -EIO; } } diff --git a/drivers/raw/ifpga/base/ifpga_fme_rsu.c b/drivers/raw/ifpga/base/ifpga_fme_rsu.c index f147aaa1e8..9f1643c5ee 100644 --- a/drivers/raw/ifpga/base/ifpga_fme_rsu.c +++ b/drivers/raw/ifpga/base/ifpga_fme_rsu.c @@ -7,6 +7,8 @@ #include #include "ifpga_sec_mgr.h" +#include + static struct ifpga_sec_mgr *sec_mgr; static void set_rsu_control(struct ifpga_sec_mgr *smgr, uint32_t ctrl) @@ -91,6 +93,7 @@ static int start_flash_update(struct ifpga_sec_mgr *smgr) static int write_flash_image(struct ifpga_sec_mgr *smgr, const char *image, uint32_t offset) { + char errmsg[RTE_STRERR_BUFSIZE]; void *buf = NULL; int retry = 0; uint32_t length = 0; @@ -110,9 +113,11 @@ static int write_flash_image(struct ifpga_sec_mgr *smgr, const char *image, fd = open(image, O_RDONLY); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); dev_err(smgr, "Failed to open \'%s\' for RD [e:%s]\n", - image, strerror(errno)); + image, errmsg); return -EIO; } @@ -129,15 +134,19 @@ static int write_flash_image(struct ifpga_sec_mgr *smgr, const char *image, to_transfer = (length > IFPGA_RSU_DATA_BLK_SIZE) ? IFPGA_RSU_DATA_BLK_SIZE : length; if (lseek(fd, offset, SEEK_SET) < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); dev_err(smgr, "Failed to seek in \'%s\' [e:%s]\n", - image, strerror(errno)); + image, errmsg); ret = -EIO; goto end; } read_size = read(fd, buf, to_transfer); if (read_size < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); dev_err(smgr, "Failed to read from \'%s\' [e:%s]\n", - image, strerror(errno)); + image, errmsg); ret = -EIO; goto end; } @@ -280,6 +289,7 @@ int fpga_update_flash(struct ifpga_fme_hw *fme, const char *image, struct sigaction sa; time_t start; int ret = 0; + char errmsg[RTE_STRERR_BUFSIZE]; if (!fme || !image || !status) { dev_err(fme, "Input parameter of %s is invalid\n", __func__); @@ -314,18 +324,22 @@ int fpga_update_flash(struct ifpga_fme_hw *fme, const char *image, fd = open(image, O_RDONLY); if (fd < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); dev_err(smgr, "Failed to open \'%s\' for RD [e:%s]\n", - image, strerror(errno)); + image, errmsg); return -EIO; } len = lseek(fd, 0, SEEK_END); close(fd); if (len < 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); dev_err(smgr, "Failed to get file length of \'%s\' [e:%s]\n", - image, strerror(errno)); + image, errmsg); return -EIO; } if (len == 0) { diff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c index 5b9b596435..d6728079e1 100644 --- a/drivers/raw/ifpga/ifpga_rawdev.c +++ b/drivers/raw/ifpga/ifpga_rawdev.c @@ -834,6 +834,7 @@ static int rte_fpga_do_pr(struct rte_rawdev *rawdev, int port_id, const char *file_name) { + char errmsg[RTE_STRERR_BUFSIZE]; struct stat file_stat; int file_fd; int ret = 0; @@ -848,7 +849,9 @@ rte_fpga_do_pr(struct rte_rawdev *rawdev, int port_id, if (file_fd < 0) { IFPGA_RAWDEV_PMD_ERR("%s: open file error: %s", __func__, file_name); - IFPGA_RAWDEV_PMD_ERR("Message : %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + IFPGA_RAWDEV_PMD_ERR("Message : %s", errmsg); return -EINVAL; } ret = stat(file_name, &file_stat); From patchwork Mon Nov 4 11:10:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147952 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 76A7B45C76; Mon, 4 Nov 2024 12:16:00 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D606E427E2; Mon, 4 Nov 2024 12:11:39 +0100 (CET) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id F2B3140A72 for ; Mon, 4 Nov 2024 12:10:47 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.174]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4Xhpct2vPvzyVQ6; Mon, 4 Nov 2024 19:09:02 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id EDBCA140137; Mon, 4 Nov 2024 19:10:46 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:46 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 50/52] vdpa/ifc: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:35 +0800 Message-ID: <20241104111037.3632161-51-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/vdpa/ifc/ifcvf_vdpa.c | 57 ++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 15 deletions(-) diff --git a/drivers/vdpa/ifc/ifcvf_vdpa.c b/drivers/vdpa/ifc/ifcvf_vdpa.c index 65de383b95..170614d8ce 100644 --- a/drivers/vdpa/ifc/ifcvf_vdpa.c +++ b/drivers/vdpa/ifc/ifcvf_vdpa.c @@ -23,6 +23,7 @@ #include #include #include +#include #include "base/ifcvf.h" @@ -407,6 +408,7 @@ vdpa_enable_vfio_intr(struct ifcvf_internal *internal, bool m_rx) int ret; uint32_t i, nr_vring; char irq_set_buf[MSIX_IRQ_SET_BUF_LEN]; + char errmsg[RTE_STRERR_BUFSIZE]; struct vfio_irq_set *irq_set; int *fd_ptr; struct rte_vhost_vring vring; @@ -445,8 +447,9 @@ vdpa_enable_vfio_intr(struct ifcvf_internal *internal, bool m_rx) */ fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); if (fd < 0) { - DRV_LOG(ERR, "can't setup eventfd: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "can't setup eventfd: %s", errmsg); return -1; } internal->intr_fd[i] = fd; @@ -456,8 +459,9 @@ vdpa_enable_vfio_intr(struct ifcvf_internal *internal, bool m_rx) ret = ioctl(internal->vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set); if (ret) { - DRV_LOG(ERR, "Error enabling MSI-X interrupts: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "Error enabling MSI-X interrupts: %s", errmsg); return -1; } @@ -470,6 +474,7 @@ vdpa_disable_vfio_intr(struct ifcvf_internal *internal) int ret; uint32_t i, nr_vring; char irq_set_buf[MSIX_IRQ_SET_BUF_LEN]; + char errmsg[RTE_STRERR_BUFSIZE]; struct vfio_irq_set *irq_set; irq_set = (struct vfio_irq_set *)irq_set_buf; @@ -488,8 +493,9 @@ vdpa_disable_vfio_intr(struct ifcvf_internal *internal) ret = ioctl(internal->vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set); if (ret) { - DRV_LOG(ERR, "Error disabling MSI-X interrupts: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "Error disabling MSI-X interrupts: %s", errmsg); return -1; } @@ -502,6 +508,7 @@ notify_relay(void *arg) int i, kickfd, epfd, nfds = 0; uint32_t qid, q_num; struct epoll_event events[IFCVF_MAX_QUEUES * 2]; + char errmsg[RTE_STRERR_BUFSIZE]; struct epoll_event ev; uint64_t buf; int nbytes; @@ -526,7 +533,9 @@ notify_relay(void *arg) rte_vhost_get_vhost_vring(internal->vid, qid, &vring); ev.data.u64 = qid | (uint64_t)vring.kickfd << 32; if (epoll_ctl(epfd, EPOLL_CTL_ADD, vring.kickfd, &ev) < 0) { - DRV_LOG(ERR, "epoll add error: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "epoll add error: %s", errmsg); return 1; } } @@ -550,9 +559,12 @@ notify_relay(void *arg) errno == EWOULDBLOCK || errno == EAGAIN) continue; + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), + "Unknown error %d", errno); DRV_LOG(INFO, "Error reading " "kickfd: %s", - strerror(errno)); + errmsg); } break; } while (1); @@ -612,6 +624,7 @@ static uint32_t intr_relay(void *arg) { struct ifcvf_internal *internal = (struct ifcvf_internal *)arg; + char errmsg[RTE_STRERR_BUFSIZE]; struct epoll_event csc_event; struct epoll_event ev; uint64_t buf; @@ -628,7 +641,9 @@ intr_relay(void *arg) ev.data.fd = rte_intr_fd_get(internal->pdev->intr_handle); if (epoll_ctl(csc_epfd, EPOLL_CTL_ADD, rte_intr_fd_get(internal->pdev->intr_handle), &ev) < 0) { - DRV_LOG(ERR, "epoll add error: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "epoll add error: %s", errmsg); goto out; } @@ -651,9 +666,11 @@ intr_relay(void *arg) errno == EWOULDBLOCK || errno == EAGAIN) continue; + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DRV_LOG(ERR, "Error reading from file descriptor %d: %s", csc_event.data.fd, - strerror(errno)); + errmsg); goto out; } else if (nbytes == 0) { DRV_LOG(ERR, "Read nothing from file descriptor %d", @@ -926,6 +943,7 @@ vring_relay(void *arg) struct rte_vhost_vring vring; uint16_t qid, q_num; struct epoll_event events[IFCVF_MAX_QUEUES * 4]; + char errmsg[RTE_STRERR_BUFSIZE]; struct epoll_event ev; int nbytes; uint64_t buf; @@ -947,7 +965,9 @@ vring_relay(void *arg) rte_vhost_get_vhost_vring(vid, qid, &vring); ev.data.u64 = qid << 1 | (uint64_t)vring.kickfd << 32; if (epoll_ctl(epfd, EPOLL_CTL_ADD, vring.kickfd, &ev) < 0) { - DRV_LOG(ERR, "epoll add error: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "epoll add error: %s", errmsg); return 1; } } @@ -961,7 +981,9 @@ vring_relay(void *arg) (uint64_t)internal->intr_fd[qid] << 32; if (epoll_ctl(epfd, EPOLL_CTL_ADD, internal->intr_fd[qid], &ev) < 0) { - DRV_LOG(ERR, "epoll add error: %s", strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "epoll add error: %s", errmsg); return 1; } update_used_ring(internal, qid); @@ -990,9 +1012,12 @@ vring_relay(void *arg) errno == EWOULDBLOCK || errno == EAGAIN) continue; + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), + "Unknown error %d", errno); DRV_LOG(INFO, "Error reading " "kickfd: %s", - strerror(errno)); + errmsg); } break; } while (1); @@ -1250,6 +1275,7 @@ ifcvf_get_notify_area(int vid, int qid, uint64_t *offset, uint64_t *size) struct internal_list *list; struct ifcvf_internal *internal; struct vfio_region_info reg = { .argsz = sizeof(reg) }; + char errmsg[RTE_STRERR_BUFSIZE]; int ret; vdev = rte_vhost_get_vdpa_device(vid); @@ -1264,8 +1290,9 @@ ifcvf_get_notify_area(int vid, int qid, uint64_t *offset, uint64_t *size) reg.index = ifcvf_get_notify_region(&internal->hw); ret = ioctl(internal->vfio_dev_fd, VFIO_DEVICE_GET_REGION_INFO, ®); if (ret) { - DRV_LOG(ERR, "Get not get device region info: %s", - strerror(errno)); + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); + DRV_LOG(ERR, "Get not get device region info: %s", errmsg); return -1; } From patchwork Mon Nov 4 11:10:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147948 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 D77CF45C76; Mon, 4 Nov 2024 12:15:29 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 47EB5427D8; Mon, 4 Nov 2024 12:11:35 +0100 (CET) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id 2790D40E4A for ; Mon, 4 Nov 2024 12:10:48 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.163.48]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4Xhpdf0vwDzQsgM; Mon, 4 Nov 2024 19:09:42 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 24A14180064; Mon, 4 Nov 2024 19:10:47 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:46 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 51/52] vdpa/mlx5: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:36 +0800 Message-ID: <20241104111037.3632161-52-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/vdpa/mlx5/mlx5_vdpa_virtq.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c b/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c index 093cdd08d2..4a07f76a80 100644 --- a/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c +++ b/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c @@ -20,6 +20,7 @@ mlx5_vdpa_virtq_kick_handler(void *cb_arg) { struct mlx5_vdpa_virtq *virtq = cb_arg; struct mlx5_vdpa_priv *priv = virtq->priv; + char errmsg[RTE_STRERR_BUFSIZE]; uint64_t buf; int nbytes; int retry; @@ -43,8 +44,10 @@ mlx5_vdpa_virtq_kick_handler(void *cb_arg) errno == EWOULDBLOCK || errno == EAGAIN) continue; + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); DRV_LOG(ERR, "Failed to read kickfd of virtq %d: %s.", - virtq->index, strerror(errno)); + virtq->index, errmsg); } break; } From patchwork Mon Nov 4 11:10:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: huangdengdui X-Patchwork-Id: 147950 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 42F2345C76; Mon, 4 Nov 2024 12:15:44 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 87F2E427DB; Mon, 4 Nov 2024 12:11:37 +0100 (CET) Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by mails.dpdk.org (Postfix) with ESMTP id 6CC9140E4D for ; Mon, 4 Nov 2024 12:10:48 +0100 (CET) Received: from mail.maildlp.com (unknown [172.19.88.194]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Xhpch5KYLzpY0X; Mon, 4 Nov 2024 19:08:52 +0800 (CST) Received: from dggpeml500011.china.huawei.com (unknown [7.185.36.84]) by mail.maildlp.com (Postfix) with ESMTPS id 4BCF01400F4; Mon, 4 Nov 2024 19:10:47 +0800 (CST) Received: from localhost.huawei.com (10.50.165.33) by dggpeml500011.china.huawei.com (7.185.36.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Mon, 4 Nov 2024 19:10:47 +0800 From: Dengdui Huang To: CC: , , , , , , , , , , Subject: [PATCH v5 52/52] vdpa/sfc: replace strerror with reentrant version Date: Mon, 4 Nov 2024 19:10:37 +0800 Message-ID: <20241104111037.3632161-53-huangdengdui@huawei.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20241104111037.3632161-1-huangdengdui@huawei.com> References: <20231114082539.1858594-1-huangdengdui@huawei.com> <20241104111037.3632161-1-huangdengdui@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.50.165.33] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500011.china.huawei.com (7.185.36.84) 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 The function strerror() is insecure in a multi-thread environment. This patch uses strerror_r() to replace it. Signed-off-by: Dengdui Huang Acked-by: Chengwen Feng Acked-by: Morten Brørup Acked-by: Huisong Li --- drivers/vdpa/sfc/sfc_vdpa_ops.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/vdpa/sfc/sfc_vdpa_ops.c b/drivers/vdpa/sfc/sfc_vdpa_ops.c index 00f9a4b04c..7e549075c4 100644 --- a/drivers/vdpa/sfc/sfc_vdpa_ops.c +++ b/drivers/vdpa/sfc/sfc_vdpa_ops.c @@ -106,6 +106,7 @@ sfc_vdpa_enable_vfio_intr(struct sfc_vdpa_ops_data *ops_data) struct rte_vhost_vring vring; struct vfio_irq_set *irq_set; struct rte_pci_device *pci_dev; + char errmsg[RTE_STRERR_BUFSIZE]; char irq_set_buf[SFC_VDPA_MSIX_IRQ_SET_BUF_LEN]; void *dev; @@ -135,9 +136,11 @@ sfc_vdpa_enable_vfio_intr(struct sfc_vdpa_ops_data *ops_data) rc = ioctl(vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set); if (rc) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); sfc_vdpa_err(ops_data->dev_handle, "error enabling MSI-X interrupts: %s", - strerror(errno)); + errmsg); return -1; } @@ -150,6 +153,7 @@ sfc_vdpa_disable_vfio_intr(struct sfc_vdpa_ops_data *ops_data) int rc; int vfio_dev_fd; struct vfio_irq_set irq_set; + char errmsg[RTE_STRERR_BUFSIZE]; void *dev; dev = ops_data->dev_handle; @@ -163,9 +167,11 @@ sfc_vdpa_disable_vfio_intr(struct sfc_vdpa_ops_data *ops_data) rc = ioctl(vfio_dev_fd, VFIO_DEVICE_SET_IRQS, &irq_set); if (rc) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); sfc_vdpa_err(ops_data->dev_handle, "error disabling MSI-X interrupts: %s", - strerror(errno)); + errmsg); return -1; } @@ -812,6 +818,7 @@ sfc_vdpa_get_notify_area(int vid, int qid, uint64_t *offset, uint64_t *size) struct rte_vdpa_device *vdpa_dev; struct sfc_vdpa_ops_data *ops_data; struct vfio_region_info reg = { .argsz = sizeof(reg) }; + char errmsg[RTE_STRERR_BUFSIZE]; const efx_nic_cfg_t *encp; int max_vring_cnt; int64_t len; @@ -840,8 +847,10 @@ sfc_vdpa_get_notify_area(int vid, int qid, uint64_t *offset, uint64_t *size) reg.index = sfc_vdpa_adapter_by_dev_handle(dev)->mem_bar.esb_rid; ret = ioctl(vfio_dev_fd, VFIO_DEVICE_GET_REGION_INFO, ®); if (ret != 0) { + if (strerror_r(errno, errmsg, sizeof(errmsg)) != 0) + snprintf(errmsg, sizeof(errmsg), "Unknown error %d", errno); sfc_vdpa_err(dev, "could not get device region info: %s", - strerror(errno)); + errmsg); return ret; }