Re: [dpdk-dev] [PATCH v25 1/6] dmadev: introduce DMA device library
From: Thomas Monjalon <hidden>
Date: 2021-10-13 07:42:05
13/10/2021 02:21, fengchengwen:
On 2021/10/13 3:09, Thomas Monjalon wrote:quoted
11/10/2021 09:33, Chengwen Feng:quoted
+static void +dma_release(struct rte_dma_dev *dev) +{ + rte_free(dev->dev_private); + memset(dev, 0, sizeof(struct rte_dma_dev)); +}
[...]
quoted
quoted
+int +rte_dma_pmd_release(const char *name) +{ + struct rte_dma_dev *dev; + + if (dma_check_name(name) != 0) + return -EINVAL; + + dev = dma_find_by_name(name); + if (dev == NULL) + return -EINVAL; + + dma_release(dev); + return 0; +}Trying to understand the logic of creation/destroy. skeldma_probe \-> skeldma_create \-> rte_dma_pmd_allocate \-> dma_allocate \-> dma_data_prepare \-> dma_dev_data_prepare skeldma_remove \-> skeldma_destroy \-> rte_dma_pmd_release \-> dma_releaseThis patch only provide device allocate function, the 2st patch provide extra logic: diff --git a/lib/dmadev/rte_dmadev.c b/lib/dmadev/rte_dmadev.c index 42a4693bd9..a6a5680d2b 100644 --- a/lib/dmadev/rte_dmadev.c +++ b/lib/dmadev/rte_dmadev.c @@ -201,6 +201,9 @@ rte_dma_pmd_release(const char *name) if (dev == NULL) return -EINVAL; + if (dev->state == RTE_DMA_DEV_READY) + return rte_dma_close(dev->dev_id); + dma_release(dev); return 0; } So the skeldma remove will be: skeldma_remove \-> skeldma_destroy \-> rte_dma_pmd_release \-> rte_dma_close \-> dma_release
OK, in this case, no need to dma_release from rte_dma_pmd_release, because it is already called from rte_dma_close.