#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)
/* 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;
}
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;
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 ?
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;
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;
if (mz == NULL)
return -EINVAL;
+ rte_strlcpy(name, mz->name, RTE_MEMZONE_NAMESIZE);
mcfg = rte_eal_get_configuration()->mem_config;
arr = &mcfg->memzones;
if (addr != NULL)
rte_free(addr);
+ rte_eal_trace_memzone_free(name, addr, ret);
return ret;
}
rte_rwlock_read_unlock(&mcfg->mlock);
+ rte_eal_trace_memzone_lookup(name, memzone);
return memzone;
}
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;
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 */