On 04-Apr-19 6:14 AM, Shahaf Shuler wrote:
Mempools can be populated with anonymous memory when using command line
parameter --mp-alloc=anon.

Considering the mempools are going to be used by the net devices,
it is better to DMA map this memory.

This patch add such mapping now that we have the APIs in place[1].

[1] commit c33a675b6276 ("bus: introduce device level DMA memory mapping")

Signed-off-by: Shahaf Shuler <shah...@mellanox.com>
---
  app/test-pmd/testpmd.c | 65 +++++++++++++++++++++++++++++++++++++++++++++
  1 file changed, 65 insertions(+)

diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index dd449a9859..3ad111a143 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -834,6 +834,63 @@ setup_extmem(uint32_t nb_mbufs, uint32_t mbuf_sz, bool 
huge)
return 0;
  }
+static void
+dma_unmap_cb(struct rte_mempool *mp __rte_unused, void *opaque __rte_unused,
+            struct rte_mempool_memhdr *memhdr, unsigned mem_idx __rte_unused)
+{
+       uint16_t pid = 0;
+       int ret;
+
+       RTE_ETH_FOREACH_DEV(pid) {
+               struct rte_eth_dev *dev =
+                       &rte_eth_devices[pid];
+
+               ret = rte_dev_dma_unmap(dev->device, memhdr->addr, 0,
+                                       memhdr->len);
+               if (ret) {
+                       TESTPMD_LOG(DEBUG,
+                                   "unable to DMA unmap addr 0x%p "
+                                   "for device %s\n",
+                                   memhdr->addr, dev->data->name);
+               }
+       }
+       ret = rte_extmem_unregister(memhdr->addr, memhdr->len);
+       if (ret) {
+               TESTPMD_LOG(DEBUG,
+                           "unable to un-register addr 0x%p\n", memhdr->addr);
+               return;

No need for a return here.

Otherwise,

Acked-by: Anatoly Burakov <anatoly.bura...@intel.com>

--
Thanks,
Anatoly

Reply via email to