[dpdk-dev] [PATCH] mem: fix freeing of memzone used by ivshmem
Mauricio Vasquez B
mauricio.vasquezbernal at studenti.polito.it
Thu Apr 14 15:48:39 CEST 2016
although previous implementation returned an error when trying to release a
memzone assigned to an ivshmem device, it stills freed it.
Fixes: cd10c42eb5bc ("mem: fix ivshmem freeing")
Signed-off-by: Mauricio Vasquez B <mauricio.vasquezbernal at studenti.polito.it>
---
lib/librte_eal/common/eal_common_memzone.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/lib/librte_eal/common/eal_common_memzone.c b/lib/librte_eal/common/eal_common_memzone.c
index 711c845..1fce906 100644
--- a/lib/librte_eal/common/eal_common_memzone.c
+++ b/lib/librte_eal/common/eal_common_memzone.c
@@ -321,15 +321,19 @@ rte_memzone_free(const struct rte_memzone *mz)
idx = ((uintptr_t)mz - (uintptr_t)mcfg->memzone);
idx = idx / sizeof(struct rte_memzone);
- addr = mcfg->memzone[idx].addr;
#ifdef RTE_LIBRTE_IVSHMEM
/*
* If ioremap_addr is set, it's an IVSHMEM memzone and we cannot
* free it.
*/
- if (mcfg->memzone[idx].ioremap_addr != 0)
+ if (mcfg->memzone[idx].ioremap_addr != 0) {
ret = -EINVAL;
+ goto error;
+ }
#endif
+
+ addr = mcfg->memzone[idx].addr;
+
if (addr == NULL)
ret = -EINVAL;
else if (mcfg->memzone_cnt == 0) {
@@ -345,6 +349,10 @@ rte_memzone_free(const struct rte_memzone *mz)
rte_free(addr);
return ret;
+
+error:
+ rte_rwlock_write_unlock(&mcfg->mlock);
+ return ret;
}
/*
--
1.9.1
More information about the dev
mailing list