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 8305EA0C45; Wed, 22 Sep 2021 10:46:45 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 115B641196; Wed, 22 Sep 2021 10:46:45 +0200 (CEST) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by mails.dpdk.org (Postfix) with ESMTP id E8D194069E for ; Wed, 22 Sep 2021 10:46:42 +0200 (CEST) Received: from dggemv711-chm.china.huawei.com (unknown [172.30.72.55]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4HDsMS0TN7z8tLd; Wed, 22 Sep 2021 16:45:56 +0800 (CST) Received: from dggpeml500024.china.huawei.com (7.185.36.10) by dggemv711-chm.china.huawei.com (10.1.198.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.8; Wed, 22 Sep 2021 16:46:40 +0800 Received: from [10.40.190.165] (10.40.190.165) by dggpeml500024.china.huawei.com (7.185.36.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.8; Wed, 22 Sep 2021 16:46:39 +0800 To: Bruce Richardson , CC: , , References: <20210826183301.333442-1-bruce.richardson@intel.com> <20210917135429.90562-1-bruce.richardson@intel.com> <20210917135429.90562-4-bruce.richardson@intel.com> From: fengchengwen Message-ID: Date: Wed, 22 Sep 2021 16:46:39 +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: <20210917135429.90562-4-bruce.richardson@intel.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.40.190.165] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) To dggpeml500024.china.huawei.com (7.185.36.10) X-CFilter-Loop: Reflected Subject: Re: [dpdk-dev] [PATCH v5 3/9] dmadev: add device iterator 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 Sender: "dev" On 2021/9/17 21:54, Bruce Richardson wrote: > Add a function and wrapper macro to iterate over all dma devices. > > Signed-off-by: Bruce Richardson > --- > lib/dmadev/rte_dmadev.c | 13 +++++++++++++ > lib/dmadev/rte_dmadev.h | 18 ++++++++++++++++++ > lib/dmadev/version.map | 1 + > 3 files changed, 32 insertions(+) > > diff --git a/lib/dmadev/rte_dmadev.c b/lib/dmadev/rte_dmadev.c > index ed342e0d32..ba189f3539 100644 > --- a/lib/dmadev/rte_dmadev.c > +++ b/lib/dmadev/rte_dmadev.c > @@ -55,6 +55,19 @@ rte_dma_dev_max(size_t dev_max) > return 0; > } > > +uint16_t > +rte_dma_next_dev(uint16_t start_dev_id) > +{ > + uint16_t dev_id = start_dev_id; > + while (dev_id < dma_devices_max && rte_dma_devices[dev_id].state == RTE_DMA_DEV_UNUSED) > + dev_id++; > + > + if (dev_id < dma_devices_max) > + return dev_id; > + > + return UINT16_MAX; > +} Now dev_id is int16_t, so the input parameter should be int16_t and return -1 when non next. e.g. int16_t rte_dma_next_dev(int16_t start_dev_id) { int16_t dev_id = start_dev_id; while (dev_id < dma_devices_max && rte_dma_devices[dev_id].state == RTE_DMA_DEV_UNUSED) dev_id++; if (dev_id < dma_devices_max) return dev_id; return -1; } > + > static int > dma_check_name(const char *name) > { > diff --git a/lib/dmadev/rte_dmadev.h b/lib/dmadev/rte_dmadev.h > index be4bb18ee6..d262b8ed8d 100644 > --- a/lib/dmadev/rte_dmadev.h > +++ b/lib/dmadev/rte_dmadev.h > @@ -219,6 +219,24 @@ bool rte_dma_is_valid(int16_t dev_id); > __rte_experimental > uint16_t rte_dma_count_avail(void); > > +/** > + * Iterates over valid dmadev instances. > + * > + * @param start_dev_id > + * The id of the next possible dmadev. > + * @return > + * Next valid dmadev, UINT16_MAX if there is none. > + */ > +__rte_experimental > +uint16_t rte_dma_next_dev(uint16_t start_dev_id); > + > +/** Utility macro to iterate over all available dmadevs */ > +#define RTE_DMA_FOREACH_DEV(p) \ > + for (p = rte_dma_next_dev(0); \ > + (uint16_t)p < UINT16_MAX; \ > + p = rte_dma_next_dev(p + 1)) #define RTE_DMA_FOREACH_DEV(p) \ for (p = rte_dma_next_dev(0); \ p != -1; \ p = rte_dma_next_dev(p + 1)) > + > + > /** DMA device support memory-to-memory transfer. > * > * @see struct rte_dma_info::dev_capa > diff --git a/lib/dmadev/version.map b/lib/dmadev/version.map > index 66420c4ede..0ab570a1be 100644 > --- a/lib/dmadev/version.map > +++ b/lib/dmadev/version.map > @@ -15,6 +15,7 @@ EXPERIMENTAL { > rte_dma_get_dev_id; > rte_dma_info_get; > rte_dma_is_valid; > + rte_dma_next_dev; > rte_dma_start; > rte_dma_stats_get; > rte_dma_stats_reset; > -- > 2.30.2 > > . >