From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [148.163.129.52]) by dpdk.org (Postfix) with ESMTP id EF6312BF7 for ; Fri, 31 Aug 2018 12:09:41 +0200 (CEST) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (uk.solarflare.com [193.34.186.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us4.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id 7E54F80062; Fri, 31 Aug 2018 10:09:39 +0000 (UTC) Received: from [192.168.38.17] (91.220.146.112) by ukex01.SolarFlarecom.com (10.17.10.4) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Fri, 31 Aug 2018 11:09:33 +0100 To: Gaetan Rivet , References: From: Andrew Rybchenko Message-ID: <378e2116-4682-1ff8-8dba-1562bc1e2530@solarflare.com> Date: Fri, 31 Aug 2018 13:09:34 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Originating-IP: [91.220.146.112] X-ClientProxiedBy: ocex03.SolarFlarecom.com (10.20.40.36) To ukex01.SolarFlarecom.com (10.17.10.4) X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24064.003 X-TM-AS-Result: No-8.391600-8.000000-10 X-TMASE-MatchedRID: 6otD/cJAac16DVqDv3PkvSa1MaKuob8PC/ExpXrHizz0wqtSyCzUVQef 5FoKtUGzsgeYz3eZctfuifG9NS6RYBbqLT/LzEWXH5YQyOg71ZbDx2NobQWtm+9Jtzyqge7RI6q q9xPsXYgu4/W02JI707aX+CWkn6HKBrU1duOq6zSev+oD6KkRIArefVId6fzVViwqXzeKRexrYH JBlx9pJ3hKMmzyRqAb4YS6FyG8vyjyUQNiagGSs9sfxZpQv2qMm/y00tE9Sta/wz3p7pLVvSxZV 2XdhwOw7fNKgmEEsE2fd/oqkQC/1Pz/jVa2JSBDhDK4kXfgEbocDDLReGt4PfmUDxpFogQXo8WM kQWv6iWhMIDkR/KfwCIQ5mZ5SqHP+wh3+qOVhMO5DpixJjQTZxSY5J++U0kvlSpScN7MZhvO73u e/ZhPdhHACgWBOfL3+7M4+13WeATQl1qJZMsBKyh2OwiG6b1TPbGvl0trn/BLixCCz2e00aPe0r m9F/+DHpweMbzSf7K0e5XFB4PP6u1Djzvs/67nVZWa/Ny93bKHYotyE5ryya7sez6aiJmJnqg/V rSZEiM= X-TM-AS-User-Approved-Sender: Yes X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10--8.391600-8.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24064.003 X-MDID: 1535710180-hUyNQDKsjiJQ Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH v1 05/13] ethdev: add private generic device iterator X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 31 Aug 2018 10:09:42 -0000 On 08/30/2018 04:41 PM, Gaetan Rivet wrote: > This iterator can be customized with a comparison function that will > trigger a stopping condition. > > It can be leveraged to write several different iterators that have > similar but non-identical purposes. > > It is private to librte_ethdev. > > Signed-off-by: Gaetan Rivet > --- > lib/librte_ethdev/Makefile | 1 + > lib/librte_ethdev/eth_private.c | 31 +++++++++++++++++++++++++++++++ > lib/librte_ethdev/eth_private.h | 26 ++++++++++++++++++++++++++ > lib/librte_ethdev/meson.build | 3 ++- > 4 files changed, 60 insertions(+), 1 deletion(-) > create mode 100644 lib/librte_ethdev/eth_private.c > create mode 100644 lib/librte_ethdev/eth_private.h > > diff --git a/lib/librte_ethdev/Makefile b/lib/librte_ethdev/Makefile > index 0935a275e..3c1c92cb9 100644 > --- a/lib/librte_ethdev/Makefile > +++ b/lib/librte_ethdev/Makefile > @@ -18,6 +18,7 @@ EXPORT_MAP := rte_ethdev_version.map > > LIBABIVER := 10 > > +SRCS-y += eth_private.c > SRCS-y += rte_ethdev.c > SRCS-y += rte_flow.c > SRCS-y += rte_tm.c > diff --git a/lib/librte_ethdev/eth_private.c b/lib/librte_ethdev/eth_private.c > new file mode 100644 > index 000000000..d565568a0 > --- /dev/null > +++ b/lib/librte_ethdev/eth_private.c Just a nit I think it is better to name it ethdev_private.c since we already have ethdev_profile.[ch] and it is about ethdev, not Ethernet. > @@ -0,0 +1,31 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2018 Gaƫtan Rivet > + */ > + > +#include "rte_ethdev.h" > +#include "eth_private.h" > + > +struct rte_eth_dev * > +eth_find_device(const struct rte_eth_dev *start, rte_eth_cmp_t cmp, > + const void *data) > +{ > + struct rte_eth_dev *edev; > + ptrdiff_t idx; > + > + /* Avoid Undefined Behaviour */ > + if (start != NULL && > + (start < &rte_eth_devices[0] || > + start > &rte_eth_devices[RTE_MAX_ETHPORTS])) > + return NULL; > + if (start != NULL) > + idx = start - &rte_eth_devices[0] + 1; > + else > + idx = 0; > + for (; idx < RTE_MAX_ETHPORTS; idx++) { > + edev = &rte_eth_devices[idx]; Shouldn't we limit it to valid ports only? If no, I think it would be useful to highlight it in the function description that it iterates over all devices including unused. > + if (cmp(edev, data) == 0) > + return edev; > + } > + return NULL; > +} > + > diff --git a/lib/librte_ethdev/eth_private.h b/lib/librte_ethdev/eth_private.h > new file mode 100644 > index 000000000..0f5c6d5c4 > --- /dev/null > +++ b/lib/librte_ethdev/eth_private.h ethdev_private.h <...>