From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 688ABA04B5 for ; Tue, 3 Dec 2019 19:28:04 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5F70C1BE80; Tue, 3 Dec 2019 19:28:04 +0100 (CET) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by dpdk.org (Postfix) with ESMTP id 7E9405B3C for ; Tue, 3 Dec 2019 19:28:02 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1575397682; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=gBWhVb69uedhbr30prgpfTkD6GiUltMrJY8bdyXV6Iw=; b=HiA8JwZboGGRs4wFhDp9M66XSKJpBVdMUJNO/h+NN4iP3iCR40057SmvAKQOM2D+iLnf1p YAoIxLwFW5Tfofs5KR1joj4qbS9uCyhAn1YQoTvmvgCxjDp/8lBi5S9jGvJWC/E3rM7IxU NG/f1CMyog2UkhSlY2RPTSpwdP+PspY= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-119-d89d3LjxMrCH9HGCDB98Eg-1; Tue, 03 Dec 2019 13:28:00 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 90B22DB75; Tue, 3 Dec 2019 18:27:59 +0000 (UTC) Received: from rh.redhat.com (ovpn-117-10.ams2.redhat.com [10.36.117.10]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9F25C5C240; Tue, 3 Dec 2019 18:27:58 +0000 (UTC) From: Kevin Traynor To: Rahul Lakkireddy Cc: dpdk stable Date: Tue, 3 Dec 2019 18:26:25 +0000 Message-Id: <20191203182714.17297-16-ktraynor@redhat.com> In-Reply-To: <20191203182714.17297-1-ktraynor@redhat.com> References: <20191203182714.17297-1-ktraynor@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-MC-Unique: d89d3LjxMrCH9HGCDB98Eg-1 X-Mimecast-Spam-Score: 0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Subject: [dpdk-stable] patch 'net/cxgbe: fix slot allocation for IPv6 flows' has been queued to LTS release 18.11.6 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to LTS release 18.11.6 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 12/10/19. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasi= ng (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/kevintraynor/dpdk-stable-queue This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable-queue/commit/16c88049ae286623e8= fb0b6cd5997b3081add248 Thanks. Kevin. --- >From 16c88049ae286623e8fb0b6cd5997b3081add248 Mon Sep 17 00:00:00 2001 From: Rahul Lakkireddy Date: Sat, 28 Sep 2019 02:00:03 +0530 Subject: [PATCH] net/cxgbe: fix slot allocation for IPv6 flows [ upstream commit 31d4d2334672fe9d96a0d23cdf914c1f219f932f ] IPv6 flows occupy only 2 slots on Chelsio T6 NICs. Fix the slot calculation logic to return correct number of slots. Fixes: ee61f5113b17 ("net/cxgbe: parse and validate flows") Fixes: 9eb2c9a48072 ("net/cxgbe: implement flow create operation") Fixes: 3f2c1e209cfc ("net/cxgbe: add Compressed Local IP region") Signed-off-by: Rahul Lakkireddy --- drivers/net/cxgbe/cxgbe_filter.c | 197 +++++++++++-------------------- drivers/net/cxgbe/cxgbe_filter.h | 5 +- drivers/net/cxgbe/cxgbe_flow.c | 15 ++- 3 files changed, 87 insertions(+), 130 deletions(-) diff --git a/drivers/net/cxgbe/cxgbe_filter.c b/drivers/net/cxgbe/cxgbe_fil= ter.c index 461b71ebe..8cd26212f 100644 --- a/drivers/net/cxgbe/cxgbe_filter.c +++ b/drivers/net/cxgbe/cxgbe_filter.c @@ -213,18 +213,30 @@ static inline void mk_set_tcb_field_ulp(struct filter= _entry *f, =20 /** - * Check if entry already filled. + * IPv6 requires 2 slots on T6 and 4 slots for cards below T6. + * IPv4 requires only 1 slot on all cards. */ -bool cxgbe_is_filter_set(struct tid_info *t, int fidx, int family) +u8 cxgbe_filter_slots(struct adapter *adap, u8 family) +{ +=09if (family =3D=3D FILTER_TYPE_IPV6) { +=09=09if (CHELSIO_CHIP_VERSION(adap->params.chip) < CHELSIO_T6) +=09=09=09return 4; + +=09=09return 2; +=09} + +=09return 1; +} + +/** + * Check if entries are already filled. + */ +bool cxgbe_is_filter_set(struct tid_info *t, u32 fidx, u8 nentries) { =09bool result =3D FALSE; -=09int i, max; - -=09/* IPv6 requires four slots and IPv4 requires only 1 slot. -=09 * Ensure, there's enough slots available. -=09 */ -=09max =3D family =3D=3D FILTER_TYPE_IPV6 ? fidx + 3 : fidx; +=09u32 i; =20 +=09/* Ensure there's enough slots available. */ =09t4_os_lock(&t->ftid_lock); -=09for (i =3D fidx; i <=3D max; i++) { +=09for (i =3D fidx; i < fidx + nentries; i++) { =09=09if (rte_bitmap_get(t->ftid_bmap, i)) { =09=09=09result =3D TRUE; @@ -237,7 +249,7 @@ bool cxgbe_is_filter_set(struct tid_info *t, int fidx, = int family) =20 /** - * Allocate a available free entry + * Allocate available free entries. */ -int cxgbe_alloc_ftid(struct adapter *adap, unsigned int family) +int cxgbe_alloc_ftid(struct adapter *adap, u8 nentries) { =09struct tid_info *t =3D &adap->tids; @@ -246,6 +258,7 @@ int cxgbe_alloc_ftid(struct adapter *adap, unsigned int= family) =20 =09t4_os_lock(&t->ftid_lock); -=09if (family =3D=3D FILTER_TYPE_IPV6) -=09=09pos =3D cxgbe_bitmap_find_free_region(t->ftid_bmap, size, 4); +=09if (nentries > 1) +=09=09pos =3D cxgbe_bitmap_find_free_region(t->ftid_bmap, size, +=09=09=09=09=09=09 nentries); =09else =09=09pos =3D cxgbe_find_first_zero_bit(t->ftid_bmap, size); @@ -565,5 +578,5 @@ static int cxgbe_set_hash_filter(struct rte_eth_dev *de= v, =09=09goto out_err; =20 -=09if (f->fs.type) { +=09if (f->fs.type =3D=3D FILTER_TYPE_IPV6) { =09=09/* IPv6 hash filter */ =09=09f->clipt =3D cxgbe_clip_alloc(f->dev, (u32 *)&f->fs.val.lip); @@ -804,9 +817,10 @@ out: =20 /** - * Set the corresponding entry in the bitmap. 4 slots are - * marked for IPv6, whereas only 1 slot is marked for IPv4. + * Set the corresponding entries in the bitmap. */ -static int cxgbe_set_ftid(struct tid_info *t, int fidx, int family) +static int cxgbe_set_ftid(struct tid_info *t, u32 fidx, u8 nentries) { +=09u32 i; + =09t4_os_lock(&t->ftid_lock); =09if (rte_bitmap_get(t->ftid_bmap, fidx)) { @@ -815,12 +829,6 @@ static int cxgbe_set_ftid(struct tid_info *t, int fidx= , int family) =09} =20 -=09if (family =3D=3D FILTER_TYPE_IPV4) { -=09=09rte_bitmap_set(t->ftid_bmap, fidx); -=09} else { -=09=09rte_bitmap_set(t->ftid_bmap, fidx); -=09=09rte_bitmap_set(t->ftid_bmap, fidx + 1); -=09=09rte_bitmap_set(t->ftid_bmap, fidx + 2); -=09=09rte_bitmap_set(t->ftid_bmap, fidx + 3); -=09} +=09for (i =3D fidx; i < fidx + nentries; i++) +=09=09rte_bitmap_set(t->ftid_bmap, i); =09t4_os_unlock(&t->ftid_lock); =09return 0; @@ -828,18 +836,13 @@ static int cxgbe_set_ftid(struct tid_info *t, int fid= x, int family) =20 /** - * Clear the corresponding entry in the bitmap. 4 slots are - * cleared for IPv6, whereas only 1 slot is cleared for IPv4. + * Clear the corresponding entries in the bitmap. */ -static void cxgbe_clear_ftid(struct tid_info *t, int fidx, int family) +static void cxgbe_clear_ftid(struct tid_info *t, u32 fidx, u8 nentries) { +=09u32 i; + =09t4_os_lock(&t->ftid_lock); -=09if (family =3D=3D FILTER_TYPE_IPV4) { -=09=09rte_bitmap_clear(t->ftid_bmap, fidx); -=09} else { -=09=09rte_bitmap_clear(t->ftid_bmap, fidx); -=09=09rte_bitmap_clear(t->ftid_bmap, fidx + 1); -=09=09rte_bitmap_clear(t->ftid_bmap, fidx + 2); -=09=09rte_bitmap_clear(t->ftid_bmap, fidx + 3); -=09} +=09for (i =3D fidx; i < fidx + nentries; i++) +=09=09rte_bitmap_clear(t->ftid_bmap, i); =09t4_os_unlock(&t->ftid_lock); } @@ -859,4 +862,5 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigned = int filter_id, =09struct filter_entry *f; =09unsigned int chip_ver; +=09u8 nentries; =09int ret; =20 @@ -869,16 +873,9 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigned= int filter_id, =09chip_ver =3D CHELSIO_CHIP_VERSION(adapter->params.chip); =20 -=09ret =3D cxgbe_is_filter_set(&adapter->tids, filter_id, fs->type); -=09if (!ret) { -=09=09dev_warn(adap, "%s: could not find filter entry: %u\n", -=09=09=09 __func__, filter_id); -=09=09return -EINVAL; -=09} - =09/* -=09 * Ensure filter id is aligned on the 2 slot boundary for T6, +=09 * Ensure IPv6 filter id is aligned on the 2 slot boundary for T6, =09 * and 4 slot boundary for cards below T6. =09 */ -=09if (fs->type) { +=09if (fs->type =3D=3D FILTER_TYPE_IPV6) { =09=09if (chip_ver < CHELSIO_T6) =09=09=09filter_id &=3D ~(0x3); @@ -887,4 +884,12 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigned= int filter_id, =09} =20 +=09nentries =3D cxgbe_filter_slots(adapter, fs->type); +=09ret =3D cxgbe_is_filter_set(&adapter->tids, filter_id, nentries); +=09if (!ret) { +=09=09dev_warn(adap, "%s: could not find filter entry: %u\n", +=09=09=09 __func__, filter_id); +=09=09return -EINVAL; +=09} + =09f =3D &adapter->tids.ftid_tab[filter_id]; =09ret =3D writable_filter(f); @@ -896,6 +901,5 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigned = int filter_id, =09=09cxgbe_clear_ftid(&adapter->tids, =09=09=09=09 f->tid - adapter->tids.ftid_base, -=09=09=09=09 f->fs.type ? FILTER_TYPE_IPV6 : -=09=09=09=09=09 FILTER_TYPE_IPV4); +=09=09=09=09 nentries); =09=09return del_filter_wr(dev, filter_id); =09} @@ -927,8 +931,8 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned = int filter_id, =09struct port_info *pi =3D ethdev2pinfo(dev); =09struct adapter *adapter =3D pi->adapter; -=09unsigned int fidx, iq, fid_bit =3D 0; +=09unsigned int fidx, iq; =09struct filter_entry *f; =09unsigned int chip_ver; -=09uint8_t bitoff[16] =3D {0}; +=09u8 nentries, bitoff[16] =3D {0}; =09int ret; =20 @@ -945,17 +949,4 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned= int filter_id, =09=09return ret; =20 -=09/* -=09 * Ensure filter id is aligned on the 4 slot boundary for IPv6 -=09 * maskfull filters. -=09 */ -=09if (fs->type) -=09=09filter_id &=3D ~(0x3); - -=09ret =3D cxgbe_is_filter_set(&adapter->tids, filter_id, fs->type); -=09if (ret) -=09=09return -EBUSY; - -=09iq =3D get_filter_steerq(dev, fs); - =09/* =09 * IPv6 filters occupy four slots and must be aligned on four-slot @@ -964,60 +955,24 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigne= d int filter_id, =09 * =09 * IPv4 filters only occupy a single slot and have no alignment -=09 * requirements but writing a new IPv4 filter into the middle -=09 * of an existing IPv6 filter requires clearing the old IPv6 -=09 * filter. +=09 * requirements. =09 */ -=09if (fs->type =3D=3D FILTER_TYPE_IPV4) { /* IPv4 */ -=09=09/* -=09=09 * For T6, If our IPv4 filter isn't being written to a -=09=09 * multiple of two filter index and there's an IPv6 -=09=09 * filter at the multiple of 2 base slot, then we need -=09=09 * to delete that IPv6 filter ... -=09=09 * For adapters below T6, IPv6 filter occupies 4 entries. -=09=09 */ +=09fidx =3D filter_id; +=09if (fs->type =3D=3D FILTER_TYPE_IPV6) { =09=09if (chip_ver < CHELSIO_T6) -=09=09=09fidx =3D filter_id & ~0x3; +=09=09=09fidx &=3D ~(0x3); =09=09else -=09=09=09fidx =3D filter_id & ~0x1; - -=09=09if (fidx !=3D filter_id && adapter->tids.ftid_tab[fidx].fs.type) { -=09=09=09f =3D &adapter->tids.ftid_tab[fidx]; -=09=09=09if (f->valid) -=09=09=09=09return -EBUSY; -=09=09} -=09} else { /* IPv6 */ -=09=09unsigned int max_filter_id; - -=09=09if (chip_ver < CHELSIO_T6) { -=09=09=09/* -=09=09=09 * Ensure that the IPv6 filter is aligned on a -=09=09=09 * multiple of 4 boundary. -=09=09=09 */ -=09=09=09if (filter_id & 0x3) -=09=09=09=09return -EINVAL; - -=09=09=09max_filter_id =3D filter_id + 4; -=09=09} else { -=09=09=09/* -=09=09=09 * For T6, CLIP being enabled, IPv6 filter would occupy -=09=09=09 * 2 entries. -=09=09=09 */ -=09=09=09if (filter_id & 0x1) -=09=09=09=09return -EINVAL; - -=09=09=09max_filter_id =3D filter_id + 2; -=09=09} - -=09=09/* -=09=09 * Check all except the base overlapping IPv4 filter -=09=09 * slots. -=09=09 */ -=09=09for (fidx =3D filter_id + 1; fidx < max_filter_id; fidx++) { -=09=09=09f =3D &adapter->tids.ftid_tab[fidx]; -=09=09=09if (f->valid) -=09=09=09=09return -EBUSY; -=09=09} +=09=09=09fidx &=3D ~(0x1); =09} =20 +=09if (fidx !=3D filter_id) +=09=09return -EINVAL; + +=09nentries =3D cxgbe_filter_slots(adapter, fs->type); +=09ret =3D cxgbe_is_filter_set(&adapter->tids, filter_id, nentries); +=09if (ret) +=09=09return -EBUSY; + +=09iq =3D get_filter_steerq(dev, fs); + =09/* =09 * Check to make sure that provided filter index is not @@ -1029,7 +984,5 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned= int filter_id, =20 =09fidx =3D adapter->tids.ftid_base + filter_id; -=09fid_bit =3D filter_id; -=09ret =3D cxgbe_set_ftid(&adapter->tids, fid_bit, -=09=09=09 fs->type ? FILTER_TYPE_IPV6 : FILTER_TYPE_IPV4); +=09ret =3D cxgbe_set_ftid(&adapter->tids, filter_id, nentries); =09if (ret) =09=09return ret; @@ -1041,7 +994,5 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned= int filter_id, =09if (ret) { =09=09/* Clear the bits we have set above */ -=09=09cxgbe_clear_ftid(&adapter->tids, fid_bit, -=09=09=09=09 fs->type ? FILTER_TYPE_IPV6 : -=09=09=09=09=09 FILTER_TYPE_IPV4); +=09=09cxgbe_clear_ftid(&adapter->tids, filter_id, nentries); =09=09return ret; =09} @@ -1074,15 +1025,11 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsig= ned int filter_id, =09f->tid =3D fidx; /* Save the actual tid */ =09ret =3D set_filter_wr(dev, filter_id); -=09if (ret) { -=09=09fid_bit =3D f->tid - adapter->tids.ftid_base; +=09if (ret) =09=09goto free_tid; -=09} =20 =09return ret; =20 free_tid: -=09cxgbe_clear_ftid(&adapter->tids, fid_bit, -=09=09=09 fs->type ? FILTER_TYPE_IPV6 : -=09=09=09=09 FILTER_TYPE_IPV4); +=09cxgbe_clear_ftid(&adapter->tids, filter_id, nentries); =09clear_filter(f); =09return ret; diff --git a/drivers/net/cxgbe/cxgbe_filter.h b/drivers/net/cxgbe/cxgbe_fil= ter.h index 6738ae4f1..06bac8ef0 100644 --- a/drivers/net/cxgbe/cxgbe_filter.h +++ b/drivers/net/cxgbe/cxgbe_filter.h @@ -249,5 +249,6 @@ cxgbe_bitmap_find_free_region(struct rte_bitmap *bmap, = unsigned int size, } =20 -bool cxgbe_is_filter_set(struct tid_info *, int fidx, int family); +u8 cxgbe_filter_slots(struct adapter *adap, u8 family); +bool cxgbe_is_filter_set(struct tid_info *t, u32 fidx, u8 nentries); void cxgbe_filter_rpl(struct adapter *adap, const struct cpl_set_tcb_rpl *= rpl); int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned int filter_id, @@ -257,5 +258,5 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigned = int filter_id, =09=09 struct ch_filter_specification *fs, =09=09 struct filter_ctx *ctx); -int cxgbe_alloc_ftid(struct adapter *adap, unsigned int family); +int cxgbe_alloc_ftid(struct adapter *adap, u8 nentries); int cxgbe_init_hash_filter(struct adapter *adap); void cxgbe_hash_filter_rpl(struct adapter *adap, diff --git a/drivers/net/cxgbe/cxgbe_flow.c b/drivers/net/cxgbe/cxgbe_flow.= c index 17d5608fa..f8f3d0a22 100644 --- a/drivers/net/cxgbe/cxgbe_flow.c +++ b/drivers/net/cxgbe/cxgbe_flow.c @@ -305,4 +305,5 @@ static int cxgbe_validate_fidxondel(struct filter_entry= *f, unsigned int fidx) =09struct adapter *adap =3D ethdev2adap(f->dev); =09struct ch_filter_specification fs =3D f->fs; +=09u8 nentries; =20 =09if (fidx >=3D adap->tids.nftids) { @@ -310,5 +311,7 @@ static int cxgbe_validate_fidxondel(struct filter_entry= *f, unsigned int fidx) =09=09return -EINVAL; =09} -=09if (!cxgbe_is_filter_set(&adap->tids, fidx, fs.type)) { + +=09nentries =3D cxgbe_filter_slots(adap, fs.type); +=09if (!cxgbe_is_filter_set(&adap->tids, fidx, nentries)) { =09=09dev_err(adap, "Already free fidx:%d f:%p\n", fidx, f); =09=09return -EINVAL; @@ -322,8 +325,12 @@ cxgbe_validate_fidxonadd(struct ch_filter_specificatio= n *fs, =09=09=09 struct adapter *adap, unsigned int fidx) { -=09if (cxgbe_is_filter_set(&adap->tids, fidx, fs->type)) { +=09u8 nentries; + +=09nentries =3D cxgbe_filter_slots(adap, fs->type); +=09if (cxgbe_is_filter_set(&adap->tids, fidx, nentries)) { =09=09dev_err(adap, "filter index: %d is busy.\n", fidx); =09=09return -EBUSY; =09} + =09if (fidx >=3D adap->tids.nftids) { =09=09dev_err(adap, "filter index (%u) >=3D max(%u)\n", @@ -352,7 +359,9 @@ static int cxgbe_get_fidx(struct rte_flow *flow, unsign= ed int *fidx) =09/* For tcam get the next available slot, if default value specified */ =09if (flow->fidx =3D=3D FILTER_ID_MAX) { +=09=09u8 nentries; =09=09int idx; =20 -=09=09idx =3D cxgbe_alloc_ftid(adap, fs->type); +=09=09nentries =3D cxgbe_filter_slots(adap, fs->type); +=09=09idx =3D cxgbe_alloc_ftid(adap, nentries); =09=09if (idx < 0) { =09=09=09dev_err(adap, "unable to get a filter index in tcam\n"); --=20 2.21.0 --- Diff of the applied patch vs upstream commit (please double-check if non-= empty: --- --- -=092019-12-03 17:29:52.751531199 +0000 +++ 0016-net-cxgbe-fix-slot-allocation-for-IPv6-flows.patch=092019-12-03 17= :29:51.716750661 +0000 @@ -1 +1 @@ -From 31d4d2334672fe9d96a0d23cdf914c1f219f932f Mon Sep 17 00:00:00 2001 +From 16c88049ae286623e8fb0b6cd5997b3081add248 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 31d4d2334672fe9d96a0d23cdf914c1f219f932f ] + @@ -12 +13,0 @@ -Cc: stable@dpdk.org @@ -22 +23 @@ -index 3b7966d04..33b95a69a 100644 +index 461b71ebe..8cd26212f 100644 @@ -25 +26 @@ -@@ -214,18 +214,30 @@ static inline void mk_set_tcb_field_ulp(struct filte= r_entry *f, +@@ -213,18 +213,30 @@ static inline void mk_set_tcb_field_ulp(struct filte= r_entry *f, @@ -65 +66 @@ -@@ -238,7 +250,7 @@ bool cxgbe_is_filter_set(struct tid_info *t, int fidx,= int family) +@@ -237,7 +249,7 @@ bool cxgbe_is_filter_set(struct tid_info *t, int fidx,= int family) @@ -75 +76 @@ -@@ -247,6 +259,7 @@ int cxgbe_alloc_ftid(struct adapter *adap, unsigned in= t family) +@@ -246,6 +258,7 @@ int cxgbe_alloc_ftid(struct adapter *adap, unsigned in= t family) @@ -85 +86 @@ -@@ -566,5 +579,5 @@ static int cxgbe_set_hash_filter(struct rte_eth_dev *d= ev, +@@ -565,5 +578,5 @@ static int cxgbe_set_hash_filter(struct rte_eth_dev *d= ev, @@ -92 +93 @@ -@@ -805,9 +818,10 @@ out: +@@ -804,9 +817,10 @@ out: @@ -106 +107 @@ -@@ -816,12 +830,6 @@ static int cxgbe_set_ftid(struct tid_info *t, int fid= x, int family) +@@ -815,12 +829,6 @@ static int cxgbe_set_ftid(struct tid_info *t, int fid= x, int family) @@ -121 +122 @@ -@@ -829,18 +837,13 @@ static int cxgbe_set_ftid(struct tid_info *t, int fi= dx, int family) +@@ -828,18 +836,13 @@ static int cxgbe_set_ftid(struct tid_info *t, int fi= dx, int family) @@ -146 +147 @@ -@@ -860,4 +863,5 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigned= int filter_id, +@@ -859,4 +862,5 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigned= int filter_id, @@ -152 +153 @@ -@@ -870,16 +874,9 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigne= d int filter_id, +@@ -869,16 +873,9 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigne= d int filter_id, @@ -171 +172 @@ -@@ -888,4 +885,12 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigne= d int filter_id, +@@ -887,4 +884,12 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigne= d int filter_id, @@ -184 +185 @@ -@@ -897,6 +902,5 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigned= int filter_id, +@@ -896,6 +901,5 @@ int cxgbe_del_filter(struct rte_eth_dev *dev, unsigned= int filter_id, @@ -192 +193 @@ -@@ -928,8 +932,8 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned= int filter_id, +@@ -927,8 +931,8 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigned= int filter_id, @@ -203 +204 @@ -@@ -946,17 +950,4 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigne= d int filter_id, +@@ -945,17 +949,4 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigne= d int filter_id, @@ -221 +222 @@ -@@ -965,60 +956,24 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsign= ed int filter_id, +@@ -964,60 +955,24 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsign= ed int filter_id, @@ -297 +298 @@ -@@ -1030,7 +985,5 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigne= d int filter_id, +@@ -1029,7 +984,5 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigne= d int filter_id, @@ -306 +307 @@ -@@ -1042,7 +995,5 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigne= d int filter_id, +@@ -1041,7 +994,5 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsigne= d int filter_id, @@ -315 +316 @@ -@@ -1075,15 +1026,11 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsi= gned int filter_id, +@@ -1074,15 +1025,11 @@ int cxgbe_set_filter(struct rte_eth_dev *dev, unsi= gned int filter_id, @@ -334 +335 @@ -index 1964730ba..06021c854 100644 +index 6738ae4f1..06bac8ef0 100644 @@ -353 +354 @@ -index 848c61f02..8a5d06ff3 100644 +index 17d5608fa..f8f3d0a22 100644