X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=lib%2Flibrte_eal%2Fcommon%2Feal_common_memzone.c;h=7c21aa921efcd7905708e8b764d57b2fd6f3377c;hb=e863fe3a13da89787fdf3b5c590101a3c0f10af6;hp=7300fe05d570586d410fef0f64b9eed129aa773c;hpb=0b82bd7b24c95ddd77f8e0b93df8456e1a38d627;p=dpdk.git diff --git a/lib/librte_eal/common/eal_common_memzone.c b/lib/librte_eal/common/eal_common_memzone.c index 7300fe05d5..7c21aa921e 100644 --- a/lib/librte_eal/common/eal_common_memzone.c +++ b/lib/librte_eal/common/eal_common_memzone.c @@ -15,15 +15,16 @@ #include #include #include -#include #include #include #include #include +#include #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 */