app/eventdev: switch sequence number to dynamic mbuf field
[dpdk.git] / lib / librte_mempool / rte_mempool.c
index 0bde995..b9f3fbd 100644 (file)
@@ -12,7 +12,6 @@
 #include <inttypes.h>
 #include <errno.h>
 #include <sys/queue.h>
-#include <sys/mman.h>
 
 #include <rte_common.h>
 #include <rte_log.h>
@@ -31,7 +30,7 @@
 #include <rte_string_fns.h>
 #include <rte_spinlock.h>
 #include <rte_tailq.h>
-#include <rte_function_versioning.h>
+#include <rte_eal_paging.h>
 
 #include "rte_mempool.h"
 #include "rte_mempool_trace.h"
@@ -148,7 +147,7 @@ get_min_page_size(int socket_id)
 
        rte_memseg_list_walk(find_min_pagesz, &wa);
 
-       return wa.min == SIZE_MAX ? (size_t) getpagesize() : wa.min;
+       return wa.min == SIZE_MAX ? (size_t) rte_mem_page_size() : wa.min;
 }
 
 
@@ -304,17 +303,12 @@ mempool_ops_alloc_once(struct rte_mempool *mp)
        return 0;
 }
 
-__vsym int
-rte_mempool_populate_iova_v21(struct rte_mempool *mp, char *vaddr,
-       rte_iova_t iova, size_t len, rte_mempool_memchunk_free_cb_t *free_cb,
-       void *opaque);
-
 /* Add objects in the pool, using a physically contiguous memory
  * zone. Return the number of objects added, or a negative value
  * on error.
  */
-__vsym int
-rte_mempool_populate_iova_v21(struct rte_mempool *mp, char *vaddr,
+int
+rte_mempool_populate_iova(struct rte_mempool *mp, char *vaddr,
        rte_iova_t iova, size_t len, rte_mempool_memchunk_free_cb_t *free_cb,
        void *opaque)
 {
@@ -374,35 +368,6 @@ fail:
        return ret;
 }
 
-BIND_DEFAULT_SYMBOL(rte_mempool_populate_iova, _v21, 21);
-MAP_STATIC_SYMBOL(
-       int rte_mempool_populate_iova(struct rte_mempool *mp, char *vaddr,
-                               rte_iova_t iova, size_t len,
-                               rte_mempool_memchunk_free_cb_t *free_cb,
-                               void *opaque),
-       rte_mempool_populate_iova_v21);
-
-__vsym int
-rte_mempool_populate_iova_v20(struct rte_mempool *mp, char *vaddr,
-       rte_iova_t iova, size_t len, rte_mempool_memchunk_free_cb_t *free_cb,
-       void *opaque);
-
-__vsym int
-rte_mempool_populate_iova_v20(struct rte_mempool *mp, char *vaddr,
-       rte_iova_t iova, size_t len, rte_mempool_memchunk_free_cb_t *free_cb,
-       void *opaque)
-{
-       int ret;
-
-       ret = rte_mempool_populate_iova_v21(mp, vaddr, iova, len, free_cb,
-                                       opaque);
-       if (ret == 0)
-               ret = -EINVAL;
-
-       return ret;
-}
-VERSION_SYMBOL(rte_mempool_populate_iova, _v20, 20.0);
-
 static rte_iova_t
 get_iova(void *addr)
 {
@@ -416,16 +381,11 @@ get_iova(void *addr)
        return ms->iova + RTE_PTR_DIFF(addr, ms->addr);
 }
 
-__vsym int
-rte_mempool_populate_virt_v21(struct rte_mempool *mp, char *addr,
-       size_t len, size_t pg_sz, rte_mempool_memchunk_free_cb_t *free_cb,
-       void *opaque);
-
 /* Populate the mempool with a virtual area. Return the number of
  * objects added, or a negative value on error.
  */
-__vsym int
-rte_mempool_populate_virt_v21(struct rte_mempool *mp, char *addr,
+int
+rte_mempool_populate_virt(struct rte_mempool *mp, char *addr,
        size_t len, size_t pg_sz, rte_mempool_memchunk_free_cb_t *free_cb,
        void *opaque)
 {
@@ -458,7 +418,7 @@ rte_mempool_populate_virt_v21(struct rte_mempool *mp, char *addr,
                                break;
                }
 
-               ret = rte_mempool_populate_iova_v21(mp, addr + off, iova,
+               ret = rte_mempool_populate_iova(mp, addr + off, iova,
                        phys_len, free_cb, opaque);
                if (ret == 0)
                        continue;
@@ -476,35 +436,6 @@ rte_mempool_populate_virt_v21(struct rte_mempool *mp, char *addr,
        rte_mempool_free_memchunks(mp);
        return ret;
 }
-BIND_DEFAULT_SYMBOL(rte_mempool_populate_virt, _v21, 21);
-MAP_STATIC_SYMBOL(
-       int rte_mempool_populate_virt(struct rte_mempool *mp,
-                               char *addr, size_t len, size_t pg_sz,
-                               rte_mempool_memchunk_free_cb_t *free_cb,
-                               void *opaque),
-       rte_mempool_populate_virt_v21);
-
-__vsym int
-rte_mempool_populate_virt_v20(struct rte_mempool *mp, char *addr,
-       size_t len, size_t pg_sz, rte_mempool_memchunk_free_cb_t *free_cb,
-       void *opaque);
-
-__vsym int
-rte_mempool_populate_virt_v20(struct rte_mempool *mp, char *addr,
-       size_t len, size_t pg_sz, rte_mempool_memchunk_free_cb_t *free_cb,
-       void *opaque)
-{
-       int ret;
-
-       ret = rte_mempool_populate_virt_v21(mp, addr, len, pg_sz,
-                                               free_cb, opaque);
-
-       if (ret == 0)
-               ret = -EINVAL;
-
-       return ret;
-}
-VERSION_SYMBOL(rte_mempool_populate_virt, _v20, 20.0);
 
 /* Get the minimal page size used in a mempool before populating it. */
 int
@@ -526,7 +457,7 @@ rte_mempool_get_page_size(struct rte_mempool *mp, size_t *pg_sz)
        else if (rte_eal_has_hugepages() || alloc_in_ext_mem)
                *pg_sz = get_min_page_size(mp->socket_id);
        else
-               *pg_sz = getpagesize();
+               *pg_sz = rte_mem_page_size();
 
        rte_mempool_trace_get_page_size(mp, *pg_sz);
        return 0;
@@ -634,7 +565,7 @@ rte_mempool_populate_default(struct rte_mempool *mp)
                                RTE_MIN((size_t)mem_size, max_alloc_size),
                                mp->socket_id, mz_flags, align);
 
-                       if (mz == NULL && rte_errno != ENOMEM)
+                       if (mz != NULL || rte_errno != ENOMEM)
                                break;
 
                        max_alloc_size = RTE_MIN(max_alloc_size,
@@ -686,7 +617,7 @@ get_anon_size(const struct rte_mempool *mp)
        size_t min_chunk_size;
        size_t align;
 
-       pg_sz = getpagesize();
+       pg_sz = rte_mem_page_size();
        pg_shift = rte_bsf32(pg_sz);
        size = rte_mempool_ops_calc_mem_size(mp, mp->size, pg_shift,
                                             &min_chunk_size, &align);
@@ -710,7 +641,7 @@ rte_mempool_memchunk_anon_free(struct rte_mempool_memhdr *memhdr,
        if (size < 0)
                return;
 
-       munmap(opaque, size);
+       rte_mem_unmap(opaque, size);
 }
 
 /* populate the mempool with an anonymous mapping */
@@ -740,20 +671,17 @@ rte_mempool_populate_anon(struct rte_mempool *mp)
        }
 
        /* get chunk of virtually continuous memory */
-       addr = mmap(NULL, size, PROT_READ | PROT_WRITE,
-               MAP_SHARED | MAP_ANONYMOUS, -1, 0);
-       if (addr == MAP_FAILED) {
-               rte_errno = errno;
+       addr = rte_mem_map(NULL, size, RTE_PROT_READ | RTE_PROT_WRITE,
+               RTE_MAP_SHARED | RTE_MAP_ANONYMOUS, -1, 0);
+       if (addr == NULL)
                return 0;
-       }
        /* can't use MMAP_LOCKED, it does not exist on BSD */
-       if (mlock(addr, size) < 0) {
-               rte_errno = errno;
-               munmap(addr, size);
+       if (rte_mem_lock(addr, size) < 0) {
+               rte_mem_unmap(addr, size);
                return 0;
        }
 
-       ret = rte_mempool_populate_virt(mp, addr, size, getpagesize(),
+       ret = rte_mempool_populate_virt(mp, addr, size, rte_mem_page_size(),
                rte_mempool_memchunk_anon_free, addr);
        if (ret == 0) /* should not happen */
                ret = -ENOBUFS;
@@ -1268,6 +1196,7 @@ rte_mempool_dump(FILE *f, struct rte_mempool *mp)
        unsigned lcore_id;
 #endif
        struct rte_mempool_memhdr *memhdr;
+       struct rte_mempool_ops *ops;
        unsigned common_count;
        unsigned cache_count;
        size_t mem_len = 0;
@@ -1277,6 +1206,7 @@ rte_mempool_dump(FILE *f, struct rte_mempool *mp)
 
        fprintf(f, "mempool <%s>@%p\n", mp->name, mp);
        fprintf(f, "  flags=%x\n", mp->flags);
+       fprintf(f, "  socket_id=%d\n", mp->socket_id);
        fprintf(f, "  pool=%p\n", mp->pool_data);
        fprintf(f, "  iova=0x%" PRIx64 "\n", mp->mz->iova);
        fprintf(f, "  nb_mem_chunks=%u\n", mp->nb_mem_chunks);
@@ -1290,6 +1220,10 @@ rte_mempool_dump(FILE *f, struct rte_mempool *mp)
 
        fprintf(f, "  private_data_size=%"PRIu32"\n", mp->private_data_size);
 
+       fprintf(f, "  ops_index=%d\n", mp->ops_index);
+       ops = rte_mempool_get_ops(mp->ops_index);
+       fprintf(f, "  ops_name: <%s>\n", (ops != NULL) ? ops->name : "NA");
+
        STAILQ_FOREACH(memhdr, &mp->mem_list, next)
                mem_len += memhdr->len;
        if (mem_len != 0) {