doc: add Meson coding style to contributors guide
[dpdk.git] / lib / librte_eal / common / eal_common_memzone.c
index 7300fe0..7c21aa9 100644 (file)
 #include <rte_memory.h>
 #include <rte_memzone.h>
 #include <rte_eal.h>
-#include <rte_eal_memconfig.h>
 #include <rte_per_lcore.h>
 #include <rte_errno.h>
 #include <rte_string_fns.h>
 #include <rte_common.h>
+#include <rte_eal_trace.h>
 
 #include "malloc_heap.h"
 #include "malloc_elem.h"
 #include "eal_private.h"
+#include "eal_memcfg.h"
 
 static inline const struct rte_memzone *
 memzone_lookup_thread_unsafe(const char *name)
@@ -71,7 +72,9 @@ memzone_reserve_aligned_thread_unsafe(const char *name, size_t len,
 
        /* no more room in config */
        if (arr->count >= arr->len) {
-               RTE_LOG(ERR, EAL, "%s(): No more room in config\n", __func__);
+               RTE_LOG(ERR, EAL,
+               "%s(): Number of requested memzone segments exceeds RTE_MAX_MEMZONE\n",
+                       __func__);
                rte_errno = ENOSPC;
                return NULL;
        }
@@ -120,13 +123,15 @@ memzone_reserve_aligned_thread_unsafe(const char *name, size_t len,
                return NULL;
        }
 
-       if ((socket_id != SOCKET_ID_ANY) &&
-           (socket_id >= RTE_MAX_NUMA_NODES || socket_id < 0)) {
+       if ((socket_id != SOCKET_ID_ANY) && socket_id < 0) {
                rte_errno = EINVAL;
                return NULL;
        }
 
-       if (!rte_eal_has_hugepages())
+       /* only set socket to SOCKET_ID_ANY if we aren't allocating for an
+        * external heap.
+        */
+       if (!rte_eal_has_hugepages() && socket_id < RTE_MAX_NUMA_NODES)
                socket_id = SOCKET_ID_ANY;
 
        contig = (flags & RTE_MEMZONE_IOVA_CONTIG) != 0;
@@ -169,7 +174,7 @@ memzone_reserve_aligned_thread_unsafe(const char *name, size_t len,
                return NULL;
        }
 
-       snprintf(mz->name, sizeof(mz->name), "%s", name);
+       strlcpy(mz->name, name, sizeof(mz->name));
        mz->iova = rte_malloc_virt2iova(mz_addr);
        mz->addr = mz_addr;
        mz->len = requested_len == 0 ?
@@ -197,6 +202,9 @@ rte_memzone_reserve_thread_safe(const char *name, size_t len, int socket_id,
        mz = memzone_reserve_aligned_thread_unsafe(
                name, len, socket_id, flags, align, bound);
 
+       rte_eal_trace_memzone_reserve(name, len, socket_id, flags, align,
+               bound, mz);
+
        rte_rwlock_write_unlock(&mcfg->mlock);
 
        return mz;
@@ -242,6 +250,7 @@ rte_memzone_reserve(const char *name, size_t len, int socket_id,
 int
 rte_memzone_free(const struct rte_memzone *mz)
 {
+       char name[RTE_MEMZONE_NAMESIZE];
        struct rte_mem_config *mcfg;
        struct rte_fbarray *arr;
        struct rte_memzone *found_mz;
@@ -252,6 +261,7 @@ rte_memzone_free(const struct rte_memzone *mz)
        if (mz == NULL)
                return -EINVAL;
 
+       rte_strlcpy(name, mz->name, RTE_MEMZONE_NAMESIZE);
        mcfg = rte_eal_get_configuration()->mem_config;
        arr = &mcfg->memzones;
 
@@ -276,6 +286,7 @@ rte_memzone_free(const struct rte_memzone *mz)
        if (addr != NULL)
                rte_free(addr);
 
+       rte_eal_trace_memzone_free(name, addr, ret);
        return ret;
 }
 
@@ -296,6 +307,7 @@ rte_memzone_lookup(const char *name)
 
        rte_rwlock_read_unlock(&mcfg->mlock);
 
+       rte_eal_trace_memzone_lookup(name, memzone);
        return memzone;
 }
 
@@ -363,6 +375,7 @@ int
 rte_eal_memzone_init(void)
 {
        struct rte_mem_config *mcfg;
+       int ret = 0;
 
        /* get pointer to global configuration */
        mcfg = rte_eal_get_configuration()->mem_config;
@@ -373,17 +386,16 @@ rte_eal_memzone_init(void)
                        rte_fbarray_init(&mcfg->memzones, "memzone",
                        RTE_MAX_MEMZONE, sizeof(struct rte_memzone))) {
                RTE_LOG(ERR, EAL, "Cannot allocate memzone list\n");
-               return -1;
+               ret = -1;
        } else if (rte_eal_process_type() == RTE_PROC_SECONDARY &&
                        rte_fbarray_attach(&mcfg->memzones)) {
                RTE_LOG(ERR, EAL, "Cannot attach to memzone list\n");
-               rte_rwlock_write_unlock(&mcfg->mlock);
-               return -1;
+               ret = -1;
        }
 
        rte_rwlock_write_unlock(&mcfg->mlock);
 
-       return 0;
+       return ret;
 }
 
 /* Walk all reserved memory zones */