@@ -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
@@ -44,6 +44,7 @@
#ifndef RTE_EXEC_ENV_WINDOWS
#include "eal_trace.h"
#endif
+#include <rte_errno.h>
#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) {
@@ -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;
}
@@ -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;
}
@@ -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;
}
@@ -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).
@@ -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;
}
@@ -15,6 +15,7 @@
#include <rte_memory.h>
#include <rte_eal.h>
#include <rte_debug.h>
+#include <rte_errno.h>
#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;
}
@@ -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.
@@ -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;
}
@@ -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) {
@@ -23,6 +23,7 @@
#include <rte_log.h>
#include <rte_common.h>
#include "rte_string_fns.h"
+#include <rte_errno.h>
#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;
}
@@ -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;
}
@@ -31,6 +31,7 @@
#include <rte_log.h>
#include <rte_eal.h>
#include <rte_memory.h>
+#include <rte_errno.h>
#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;
}
@@ -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,
@@ -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;
}
@@ -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;
}
@@ -13,12 +13,14 @@
#include <unistd.h>
#include <rte_log.h>
+#include <rte_errno.h>
#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;
}
@@ -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;
@@ -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;
}