On 7/15/2021 2:20 PM, Paulis Gributs wrote: > This patch removes most uses of the global variable rte_eth_devices > from testpmd. This was done to avoid using the object directly which > applications should not do. > > Most uses have been replaced with standard function calls, however > the use of it in the show_macs function could not be replaced as no > function call exists to get all mac addresses of a given port. > > Signed-off-by: Paulis Gributs <paulis.grib...@intel.com> > --- > app/test-pmd/testpmd.c | 80 +++++++++++++++++++++++++++++------------- > app/test-pmd/txonly.c | 18 ++++++++-- > 2 files changed, 71 insertions(+), 27 deletions(-) > > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c > index 1cdd3cdd12..42d9804dab 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -857,16 +857,23 @@ dma_unmap_cb(struct rte_mempool *mp __rte_unused, void > *opaque __rte_unused, > int ret; > > RTE_ETH_FOREACH_DEV(pid) { > - struct rte_eth_dev *dev = > - &rte_eth_devices[pid]; > + struct rte_eth_dev_info dev_info; > > - ret = rte_dev_dma_unmap(dev->device, memhdr->addr, 0, > - memhdr->len); > + ret = eth_dev_info_get_print_err(pid, &dev_info); > + if (ret != 0) { > + TESTPMD_LOG(DEBUG, > + "unable to get device info for port %d on > addr 0x%p," > + "mempool unmapping will not be performed\n", > + pid, memhdr->addr); > + continue; > + } > + > + ret = rte_dev_dma_unmap(dev_info.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); > + memhdr->addr, dev_info.device->name); > } > } > ret = rte_extmem_unregister(memhdr->addr, memhdr->len); > @@ -892,16 +899,22 @@ dma_map_cb(struct rte_mempool *mp __rte_unused, void > *opaque __rte_unused, > return; > } > RTE_ETH_FOREACH_DEV(pid) { > - struct rte_eth_dev *dev = > - &rte_eth_devices[pid]; > + struct rte_eth_dev_info dev_info; > > - ret = rte_dev_dma_map(dev->device, memhdr->addr, 0, > - memhdr->len); > + ret = eth_dev_info_get_print_err(pid, &dev_info); > + if (ret != 0) { > + TESTPMD_LOG(DEBUG, > + "unable to get device info for port %d on > addr 0x%p," > + "mempool mapping will not be performed\n", > + pid, memhdr->addr); > + continue; > + } > + ret = rte_dev_dma_map(dev_info.device, memhdr->addr, 0, > memhdr->len); > if (ret) { > TESTPMD_LOG(DEBUG, > "unable to DMA map addr 0x%p " > "for device %s\n", > - memhdr->addr, dev->data->name); > + memhdr->addr, dev_info.device->name); > } > } > }
Hi Shahaf, These callbacks are used to map/unmap anon memory and added on commit [1]. Can you please elaborate why it is required? And does xmem covers this functionality already? The concern I have is, it uses some DPDK details, like rte_device to implement functionality in a test applications (testpmd). If this is a required functionality for end user, it is very hard for them to implement this, and perhaps we should have some APIs/wrappers to help the users in that case. Or if it is not required, we can perhaps drop from testpmd. But first I am trying to understand what functionality it brings, if it is something required by end user or not. Thanks, ferruh [1] Commit 3a0968c828a6 ("app/testpmd: map anonymous memory for devices")