#include <fcntl.h>
#include <inttypes.h>
#include <limits.h>
-#include <sys/mman.h>
#include <stdint.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <rte_common.h>
-#include <rte_log.h>
+#include <rte_eal_paging.h>
#include <rte_errno.h>
+#include <rte_log.h>
+#include <rte_memory.h>
#include <rte_spinlock.h>
#include <rte_tailq.h>
return -1;
}
- map_addr = mmap(addr, len, PROT_READ | PROT_WRITE,
- MAP_SHARED | MAP_FIXED, fd, 0);
+ map_addr = rte_mem_map(addr, len, RTE_PROT_READ | RTE_PROT_WRITE,
+ RTE_MAP_SHARED | RTE_MAP_FORCE_ADDRESS, fd, 0);
if (map_addr != addr) {
- RTE_LOG(ERR, EAL, "mmap() failed: %s\n", strerror(errno));
- /* pass errno up the chain */
- rte_errno = errno;
return -1;
}
return 0;
struct mem_area *ma = NULL;
void *data = NULL;
int fd = -1;
+ const struct internal_config *internal_conf =
+ eal_get_internal_configuration();
if (arr == NULL) {
rte_errno = EINVAL;
return -1;
}
- page_sz = sysconf(_SC_PAGESIZE);
+ page_sz = rte_mem_page_size();
if (page_sz == (size_t)-1) {
free(ma);
return -1;
fd = -1;
- if (internal_config.no_shconf) {
+ if (internal_conf->no_shconf) {
/* remap virtual area as writable */
- void *new_data = mmap(data, mmap_len, PROT_READ | PROT_WRITE,
- MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, fd, 0);
- if (new_data == MAP_FAILED) {
+ static const int flags = RTE_MAP_FORCE_ADDRESS |
+ RTE_MAP_PRIVATE | RTE_MAP_ANONYMOUS;
+ void *new_data = rte_mem_map(data, mmap_len,
+ RTE_PROT_READ | RTE_PROT_WRITE, flags, fd, 0);
+ if (new_data == NULL) {
RTE_LOG(DEBUG, EAL, "%s(): couldn't remap anonymous memory: %s\n",
- __func__, strerror(errno));
+ __func__, rte_strerror(rte_errno));
goto fail;
}
} else {
return 0;
fail:
if (data)
- munmap(data, mmap_len);
+ rte_mem_unmap(data, mmap_len);
if (fd >= 0)
close(fd);
free(ma);
return -1;
}
- page_sz = sysconf(_SC_PAGESIZE);
+ page_sz = rte_mem_page_size();
if (page_sz == (size_t)-1) {
free(ma);
return -1;
return 0;
fail:
if (data)
- munmap(data, mmap_len);
+ rte_mem_unmap(data, mmap_len);
if (fd >= 0)
close(fd);
free(ma);
* really do anything about it, things will blow up either way.
*/
- size_t page_sz = sysconf(_SC_PAGESIZE);
-
+ size_t page_sz = rte_mem_page_size();
if (page_sz == (size_t)-1)
return -1;
goto out;
}
- munmap(arr->data, mmap_len);
+ rte_mem_unmap(arr->data, mmap_len);
/* area is unmapped, close fd and remove the tailq entry */
if (tmp->fd >= 0)
size_t mmap_len;
int fd, ret;
char path[PATH_MAX];
+ const struct internal_config *internal_conf =
+ eal_get_internal_configuration();
if (arr == NULL) {
rte_errno = EINVAL;
* really do anything about it, things will blow up either way.
*/
- size_t page_sz = sysconf(_SC_PAGESIZE);
-
+ size_t page_sz = rte_mem_page_size();
if (page_sz == (size_t)-1)
return -1;
goto out;
}
/* with no shconf, there were never any files to begin with */
- if (!internal_config.no_shconf) {
+ if (!internal_conf->no_shconf) {
/*
* attempt to get an exclusive lock on the file, to ensure it
* has been detached by all other processes
}
close(fd);
}
- munmap(arr->data, mmap_len);
+ rte_mem_unmap(arr->data, mmap_len);
/* area is unmapped, remove the tailq entry */
TAILQ_REMOVE(&mem_area_tailq, tmp, next);