eal: restrict default plugin path to shared lib mode
[dpdk.git] / lib / librte_eal / common / eal_common_fbarray.c
index c52ddb9..1220e2b 100644 (file)
@@ -5,15 +5,16 @@
 #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>
 
@@ -90,12 +91,9 @@ resize_and_map(int fd, void *addr, size_t len)
                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;
@@ -717,6 +715,8 @@ rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len,
        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;
@@ -733,7 +733,7 @@ rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len,
                return -1;
        }
 
-       page_sz = sysconf(_SC_PAGESIZE);
+       page_sz = rte_mem_page_size();
        if (page_sz == (size_t)-1) {
                free(ma);
                return -1;
@@ -752,13 +752,15 @@ rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len,
 
        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 {
@@ -820,7 +822,7 @@ rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len,
        return 0;
 fail:
        if (data)
-               munmap(data, mmap_len);
+               rte_mem_unmap(data, mmap_len);
        if (fd >= 0)
                close(fd);
        free(ma);
@@ -858,7 +860,7 @@ rte_fbarray_attach(struct rte_fbarray *arr)
                return -1;
        }
 
-       page_sz = sysconf(_SC_PAGESIZE);
+       page_sz = rte_mem_page_size();
        if (page_sz == (size_t)-1) {
                free(ma);
                return -1;
@@ -909,7 +911,7 @@ rte_fbarray_attach(struct rte_fbarray *arr)
        return 0;
 fail:
        if (data)
-               munmap(data, mmap_len);
+               rte_mem_unmap(data, mmap_len);
        if (fd >= 0)
                close(fd);
        free(ma);
@@ -937,8 +939,7 @@ rte_fbarray_detach(struct rte_fbarray *arr)
         * 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;
 
@@ -957,7 +958,7 @@ rte_fbarray_detach(struct rte_fbarray *arr)
                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)
@@ -978,6 +979,8 @@ rte_fbarray_destroy(struct rte_fbarray *arr)
        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;
@@ -992,8 +995,7 @@ rte_fbarray_destroy(struct rte_fbarray *arr)
         * 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;
 
@@ -1012,7 +1014,7 @@ rte_fbarray_destroy(struct rte_fbarray *arr)
                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
@@ -1042,7 +1044,7 @@ rte_fbarray_destroy(struct rte_fbarray *arr)
                }
                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);