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 6004042D23; Thu, 22 Jun 2023 13:51:14 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4F2A640DDA; Thu, 22 Jun 2023 13:51:14 +0200 (CEST) Received: from shelob.oktetlabs.ru (shelob.oktetlabs.ru [91.220.146.113]) by mails.dpdk.org (Postfix) with ESMTP id 4E3E1406A2 for ; Thu, 22 Jun 2023 13:51:13 +0200 (CEST) Received: from [192.168.1.40] (unknown [188.170.81.161]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by shelob.oktetlabs.ru (Postfix) with ESMTPSA id 21E3F50; Thu, 22 Jun 2023 14:51:12 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 shelob.oktetlabs.ru 21E3F50 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=oktetlabs.ru; s=default; t=1687434672; bh=HuFPNsAynFdAh1OB9QGmB2m914WEfeFYItETt3Cyo1Q=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=NihHRuXoV2aWXq6m88nMMm2EWOdYluiwapZ43Uo0wBKd7PBmYVkn9fl6Q+Z0vY/A0 yWG5fq0QCZF1Lt7fVJQIJBRfL391+NHIWSXgy5Pom5r7ysnERcCIRNTPWvPjbBx1gM tLNRYIvMenZF3b/HkDx7IFO6esUtxqubG/B5umDw= Message-ID: Date: Thu, 22 Jun 2023 14:51:11 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: [PATCH v6 2/4] common/sfc_efx/base: add API to get installed filters count Content-Language: en-US To: Artemii Morozov , dev@dpdk.org Cc: Ivan Malov , Viacheslav Galaktionov References: <20230531134122.119508-1-artemii.morozov@arknetworks.am> <20230622113104.261556-1-artemii.morozov@arknetworks.am> <20230622113104.261556-3-artemii.morozov@arknetworks.am> From: Andrew Rybchenko In-Reply-To: <20230622113104.261556-3-artemii.morozov@arknetworks.am> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit 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 On 6/22/23 14:31, Artemii Morozov wrote: > This API allows to get number of installed filters. This will > be used in the future patches. > > Signed-off-by: Artemii Morozov > --- > drivers/common/sfc_efx/base/ef10_filter.c | 20 +++++++++++++++++ > drivers/common/sfc_efx/base/ef10_impl.h | 6 +++++ > drivers/common/sfc_efx/base/efx_filter.c | 27 +++++++++++++++++++++++ > drivers/common/sfc_efx/base/efx_impl.h | 7 ++++++ > 4 files changed, 60 insertions(+) > > diff --git a/drivers/common/sfc_efx/base/ef10_filter.c b/drivers/common/sfc_efx/base/ef10_filter.c > index d6940011c0..278502fb61 100644 > --- a/drivers/common/sfc_efx/base/ef10_filter.c > +++ b/drivers/common/sfc_efx/base/ef10_filter.c > @@ -2113,6 +2113,26 @@ ef10_filter_reconfigure( > return (rc); > } > > + __checkReturn efx_rc_t > +ef10_filter_get_count( > + __in efx_nic_t *enp, > + __out uint32_t *count) > +{ > + ef10_filter_table_t *table = enp->en_filter.ef_ef10_filter_table; > + uint32_t filters_count; > + > + EFSYS_ASSERT(EFX_FAMILY_IS_EF100(enp) || EFX_FAMILY_IS_EF10(enp)); > + EFSYS_ASSERT(count != NULL); > + > + filters_count = table->eft_unicst_filter_count + > + table->eft_mulcst_filter_count + > + table->eft_encap_filter_count; I guess encap filters are orthogonal to Rx VLAN stripping. But may be it is not a problem. > + > + *count = filters_count; > + > + return (0); > +} > + > void > ef10_filter_get_default_rxq( > __in efx_nic_t *enp, > diff --git a/drivers/common/sfc_efx/base/ef10_impl.h b/drivers/common/sfc_efx/base/ef10_impl.h > index 877aedad45..914bba10ce 100644 > --- a/drivers/common/sfc_efx/base/ef10_impl.h > +++ b/drivers/common/sfc_efx/base/ef10_impl.h > @@ -1347,6 +1347,12 @@ ef10_filter_reconfigure( > __in_ecount(6*count) uint8_t const *addrs, > __in uint32_t count); > > +LIBEFX_INTERNAL > +extern __checkReturn efx_rc_t > +ef10_filter_get_count( > + __in efx_nic_t *enp, > + __out uint32_t *count); > + > LIBEFX_INTERNAL > extern void > ef10_filter_get_default_rxq( > diff --git a/drivers/common/sfc_efx/base/efx_filter.c b/drivers/common/sfc_efx/base/efx_filter.c > index 83c37ff859..a8b62ee88d 100644 > --- a/drivers/common/sfc_efx/base/efx_filter.c > +++ b/drivers/common/sfc_efx/base/efx_filter.c > @@ -53,6 +53,7 @@ static const efx_filter_ops_t __efx_filter_siena_ops = { > siena_filter_delete, /* efo_delete */ > siena_filter_supported_filters, /* efo_supported_filters */ > NULL, /* efo_reconfigure */ > + NULL, /* efo_get_count */ > }; > #endif /* EFSYS_OPT_SIENA */ > > @@ -65,6 +66,7 @@ static const efx_filter_ops_t __efx_filter_ef10_ops = { > ef10_filter_delete, /* efo_delete */ > ef10_filter_supported_filters, /* efo_supported_filters */ > ef10_filter_reconfigure, /* efo_reconfigure */ > + ef10_filter_get_count, /* efo_get_count */ > }; > #endif /* EFX_OPTS_EF10() */ > > @@ -77,6 +79,7 @@ static const efx_filter_ops_t __efx_filter_rhead_ops = { > ef10_filter_delete, /* efo_delete */ > ef10_filter_supported_filters, /* efo_supported_filters */ > ef10_filter_reconfigure, /* efo_reconfigure */ > + ef10_filter_get_count, /* efo_get_count */ > }; > #endif /* EFSYS_OPT_RIVERHEAD */ > > @@ -306,6 +309,30 @@ efx_filter_reconfigure( > > return (0); > > +fail1: > + EFSYS_PROBE1(fail1, efx_rc_t, rc); > + > + return (rc); > +} > + > + __checkReturn efx_rc_t > +efx_filter_get_count( > + __in efx_nic_t *enp, > + __out uint32_t *count) > +{ > + efx_rc_t rc; > + > + EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC); > + EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE); > + EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_FILTER); > + > + if (enp->en_efop->efo_get_count != NULL) { It looks bad to return 0, but do not fill in count. IMHO, it should be an error if callback is not provided. > + if ((rc = enp->en_efop->efo_get_count(enp, count)) != 0) > + goto fail1; > + } > + > + return (0); > + > fail1: > EFSYS_PROBE1(fail1, efx_rc_t, rc); > > diff --git a/drivers/common/sfc_efx/base/efx_impl.h b/drivers/common/sfc_efx/base/efx_impl.h > index 45e99d01c5..d657734bc5 100644 > --- a/drivers/common/sfc_efx/base/efx_impl.h > +++ b/drivers/common/sfc_efx/base/efx_impl.h > @@ -288,6 +288,7 @@ typedef struct efx_filter_ops_s { > efx_rc_t (*efo_reconfigure)(efx_nic_t *, uint8_t const *, boolean_t, > boolean_t, boolean_t, boolean_t, > uint8_t const *, uint32_t); > + efx_rc_t (*efo_get_count)(efx_nic_t *, uint32_t *); > } efx_filter_ops_t; > > LIBEFX_INTERNAL > @@ -302,6 +303,12 @@ efx_filter_reconfigure( > __in_ecount(6*count) uint8_t const *addrs, > __in uint32_t count); > > +LIBEFX_INTERNAL > +extern __checkReturn efx_rc_t > +efx_filter_get_count( > + __in efx_nic_t *enp, > + __out uint32_t *count); > + > #endif /* EFSYS_OPT_FILTER */ > > #if EFSYS_OPT_TUNNEL