From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4068E426E6; Sun, 8 Oct 2023 03:40:41 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1545340263; Sun, 8 Oct 2023 03:40:41 +0200 (CEST) Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by mails.dpdk.org (Postfix) with ESMTP id 7C73A4021F for ; Sun, 8 Oct 2023 03:40:39 +0200 (CEST) Received: from dggpeml100024.china.huawei.com (unknown [172.30.72.56]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4S34W80sYhztSwc; Sun, 8 Oct 2023 09:36:04 +0800 (CST) Received: from [10.67.121.161] (10.67.121.161) by dggpeml100024.china.huawei.com (7.185.36.115) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.31; Sun, 8 Oct 2023 09:40:37 +0800 Subject: Re: [PATCH 1/4] dmadev: add function to get list of device identifiers To: Gowrishankar Muthukrishnan , CC: , Vamsi Attunuru References: <20230810122111.2329-1-gmuthukrishn@marvell.com> <20230810122111.2329-2-gmuthukrishn@marvell.com> From: fengchengwen Message-ID: <8658f856-b7f9-f366-ed2c-3700e0d42749@huawei.com> Date: Sun, 8 Oct 2023 09:40:37 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.11.0 MIME-Version: 1.0 In-Reply-To: <20230810122111.2329-2-gmuthukrishn@marvell.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.67.121.161] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml100024.china.huawei.com (7.185.36.115) X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Hi Gowrishankar, This could create a help function in test, just like: func() { RTE_DMA_FOREACH_DEV(i) { rte_dma_info_get(i, &dev_info); if (strncmp(dev_info->dev_name, xxx) ... } } If some application (not test) should pick some specific device, I suggest add more general API, e.g. typedef int (*rte_dma_filter_fn)(struct rte_dma_info *dev_info, void *param); uint16_t rte_dma_get_devs_by_filter(rte_dma_filter_fn fn, void *param, uint16_t *dev_ids, uint16_t nb_ids) { RTE_DMA_FOREACH_DEV(i) { rte_dma_info_get(i, &dev_info); if (fn(&dev_info, param) == 0) { // add to out list } } } So we could filter special name-prefix/capability/multi-vchans Thanks. On 2023/8/10 20:21, Gowrishankar Muthukrishnan wrote: > Add a function to get list of device identifiers for a given driver > name. > > Signed-off-by: Gowrishankar Muthukrishnan > --- > lib/dmadev/rte_dmadev.c | 20 ++++++++++++++++++++ > lib/dmadev/rte_dmadev.h | 21 +++++++++++++++++++++ > lib/dmadev/version.map | 1 + > 3 files changed, 42 insertions(+) > > diff --git a/lib/dmadev/rte_dmadev.c b/lib/dmadev/rte_dmadev.c > index 8c095e1f35..f2a106564d 100644 > --- a/lib/dmadev/rte_dmadev.c > +++ b/lib/dmadev/rte_dmadev.c > @@ -388,6 +388,26 @@ rte_dma_get_dev_id_by_name(const char *name) > return dev->data->dev_id; > } > > +uint8_t > +rte_dma_get_dev_list_by_driver(const char *name, int16_t *devs, uint8_t nb_devs) > +{ > + uint8_t i, count = 0; > + > + if (name == NULL) > + return count; > + > + for (i = 0; i < dma_devices_max && count < nb_devs; i++) { > + if (rte_dma_devices[i].state == RTE_DMA_DEV_UNUSED) > + continue; > + > + if (strncmp(rte_dma_devices[i].device->driver->name, > + name, strlen(name) + 1) == 0) > + devs[count++] = i; > + } > + > + return count; > +} > + > bool > rte_dma_is_valid(int16_t dev_id) > { > diff --git a/lib/dmadev/rte_dmadev.h b/lib/dmadev/rte_dmadev.h > index e61d71959e..689062a686 100644 > --- a/lib/dmadev/rte_dmadev.h > +++ b/lib/dmadev/rte_dmadev.h > @@ -191,6 +191,27 @@ int rte_dma_dev_max(size_t dev_max); > __rte_experimental > int rte_dma_get_dev_id_by_name(const char *name); > > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change without prior notice. > + * > + * Get the list of device identifiers for the DMA driver. > + * > + * @param name > + * DMA driver name. > + * @param devs > + * Output devices identifiers. > + * @param nb_devs > + * Maximal number of devices. > + * > + * @return > + * Returns number of device identifiers. > + */ > +__rte_experimental > +uint8_t rte_dma_get_dev_list_by_driver(const char *name, > + int16_t *devs, > + uint8_t nb_devs); > + > /** > * @warning > * @b EXPERIMENTAL: this API may change without prior notice. > diff --git a/lib/dmadev/version.map b/lib/dmadev/version.map > index 7031d6b335..b4d56b41a0 100644 > --- a/lib/dmadev/version.map > +++ b/lib/dmadev/version.map > @@ -7,6 +7,7 @@ EXPERIMENTAL { > rte_dma_dev_max; > rte_dma_dump; > rte_dma_get_dev_id_by_name; > + rte_dma_get_dev_list_by_driver; > rte_dma_info_get; > rte_dma_is_valid; > rte_dma_next_dev; >