[PATCH] ethdev: fix DMA zone reserve not honoring size
From: Pavan Nikhilesh Bhagavatula <hidden>
Date: 2019-03-31 16:25:04
Subsystem:
library code, the rest · Maintainers:
Andrew Morton, Linus Torvalds
From: Pavan Nikhilesh Bhagavatula <hidden>
Date: 2019-03-31 16:25:04
Subsystem:
library code, the rest · Maintainers:
Andrew Morton, Linus Torvalds
From: Pavan Nikhilesh <redacted>
The `rte_eth_dma_zone_reserve()` is generally used to create HW rings.
In some scenarios when a driver needs to reconfigure the ring size
since the named memzone already exists it returns the previous memzone
without checking if a different sized ring is requested.
Introduce a check to see if the ring size requested is different from the
previously created memzone length.
Fixes: 719dbebceb81 ("xen: allow determining DOM0 at runtime")
Cc: stable@dpdk.org
Signed-off-by: Pavan Nikhilesh <redacted>
---
lib/librte_ethdev/rte_ethdev.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c
index 12b66b68c..4ae12e43b 100644
--- a/lib/librte_ethdev/rte_ethdev.c
+++ b/lib/librte_ethdev/rte_ethdev.c@@ -3604,9 +3604,12 @@ rte_eth_dma_zone_reserve(const struct rte_eth_dev *dev, const char *ring_name, } mz = rte_memzone_lookup(z_name); - if (mz) + if (mz && (mz->len == size)) return mz; + if (mz) + rte_memzone_free(mz); + return rte_memzone_reserve_aligned(z_name, size, socket_id, RTE_MEMZONE_IOVA_CONTIG, align); }
--
2.21.0