From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (xvm-189-124.dc0.ghst.net [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D7EB9A0A01 for ; Tue, 5 Jan 2021 04:40:02 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CDB051607B4; Tue, 5 Jan 2021 04:40:02 +0100 (CET) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mails.dpdk.org (Postfix) with ESMTP id 7B8F21607AA; Tue, 5 Jan 2021 04:39:59 +0100 (CET) IronPort-SDR: o/uEcfaeuTDCv2s8xKBNngMRg5rKCK+/olCMZMrR5yCT7hRpC/3WhteTz8Vx6rR9EEFxdgy7s9 Tnaq0fuD1MlA== X-IronPort-AV: E=McAfee;i="6000,8403,9854"; a="195573873" X-IronPort-AV: E=Sophos;i="5.78,476,1599548400"; d="scan'208";a="195573873" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Jan 2021 19:39:58 -0800 IronPort-SDR: TCGTFV2hcBxHlQoquO2GvYScBj5Hjp+NGyCK7rQpBC9rFaPGR2UH610Hjp/DKFwUapVPwnXggF QAQAFBcu1LzA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,476,1599548400"; d="scan'208";a="350202915" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by fmsmga008.fm.intel.com with ESMTP; 04 Jan 2021 19:39:58 -0800 Received: from shsmsx602.ccr.corp.intel.com (10.109.6.142) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 4 Jan 2021 19:39:57 -0800 Received: from shsmsx601.ccr.corp.intel.com (10.109.6.141) by SHSMSX602.ccr.corp.intel.com (10.109.6.142) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 5 Jan 2021 11:39:55 +0800 Received: from shsmsx601.ccr.corp.intel.com ([10.109.6.141]) by SHSMSX601.ccr.corp.intel.com ([10.109.6.141]) with mapi id 15.01.1713.004; Tue, 5 Jan 2021 11:39:55 +0800 From: "Guo, Jia" To: "Xing, Beilei" , "dev@dpdk.org" CC: "stable@dpdk.org" , "Sun, Chenmin" Thread-Topic: [PATCH v5] net/i40e: fix flex payload rule conflict issue Thread-Index: AQHW4xHNRiC7xnMfIUy3teL+y5TbyaoYYpBg Date: Tue, 5 Jan 2021 03:39:55 +0000 Message-ID: <18270964ce4945eab702133903ea5b16@intel.com> References: <20201229054639.92132-1-beilei.xing@intel.com> <20210105031256.89718-1-beilei.xing@intel.com> In-Reply-To: <20210105031256.89718-1-beilei.xing@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 x-originating-ip: [10.239.127.36] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-stable] [PATCH v5] net/i40e: fix flex payload rule conflict issue X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 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" Acked-by: Jeff Guo > -----Original Message----- > From: Xing, Beilei > Sent: Tuesday, January 5, 2021 11:13 AM > To: Guo, Jia ; dev@dpdk.org > Cc: Xing, Beilei ; stable@dpdk.org; Sun, Chenmin > > Subject: [PATCH v5] net/i40e: fix flex payload rule conflict issue >=20 > From: Beilei Xing >=20 > With the following commands, the second flow can't be created successfull= y. >=20 > 1. flow create 0 ingress pattern eth / ipv4 / udp / > raw relative is 1 pattern is 0102030405 / end > actions drop / end > 2. flow destroy 0 rule 0 > 3. flow create 0 ingress pattern eth / ipv4 / udp / > raw relative is 1 pattern is 010203040506 / end > actions drop / end >=20 > The root cause is that a flag for flex pit isn't reset. >=20 > Fixes: 6ced3dd72f5f ("net/i40e: support flexible payload parsing for FDIR= ") > Cc: stable@dpdk.org >=20 > Reported-by: Chenmin Sun > Signed-off-by: Beilei Xing > --- >=20 > v4 changes: > - Code refine. > v3 changes: > - Add flow count for flexible payload flow. > v2 changeds: > - Add fix line. >=20 > drivers/net/i40e/i40e_ethdev.h | 3 +++ > drivers/net/i40e/i40e_fdir.c | 19 ++++++++++++++++--- > drivers/net/i40e/i40e_flow.c | 4 ++++ > 3 files changed, 23 insertions(+), 3 deletions(-) >=20 > diff --git a/drivers/net/i40e/i40e_ethdev.h > b/drivers/net/i40e/i40e_ethdev.h index 696c5aaf7e..aac226999c 100644 > --- a/drivers/net/i40e/i40e_ethdev.h > +++ b/drivers/net/i40e/i40e_ethdev.h > @@ -636,6 +636,7 @@ struct i40e_fdir_flow_ext { > bool is_udp; /* ipv4|ipv6 udp flow */ > enum i40e_flxpld_layer_idx layer_idx; > struct i40e_fdir_flex_pit flex_pit[I40E_MAX_FLXPLD_LAYER * > I40E_MAX_FLXPLD_FIED]; > + bool is_flex_flow; > }; >=20 > /* A structure used to define the input for a flow director filter entry= */ @@ > -784,6 +785,8 @@ struct i40e_fdir_info { > bool flex_mask_flag[I40E_FILTER_PCTYPE_MAX]; >=20 > bool inset_flag[I40E_FILTER_PCTYPE_MAX]; /* Mark if input set is set > */ > + > + uint32_t flex_flow_count[I40E_MAX_FLXPLD_LAYER]; > }; >=20 > /* Ethertype filter number HW supports */ diff --git > a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c index > 50c0eee9f2..0343e8b09a 100644 > --- a/drivers/net/i40e/i40e_fdir.c > +++ b/drivers/net/i40e/i40e_fdir.c > @@ -355,6 +355,7 @@ i40e_init_flx_pld(struct i40e_pf *pf) > I40E_PRTQF_FLX_PIT(index + 1), 0x0000FC29);/*non- > used*/ > I40E_WRITE_REG(hw, > I40E_PRTQF_FLX_PIT(index + 2), 0x0000FC2A);/*non- > used*/ > + pf->fdir.flex_pit_flag[i] =3D 0; > } >=20 > /* initialize the masks */ > @@ -1513,8 +1514,6 @@ i40e_flow_set_fdir_flex_pit(struct i40e_pf *pf, > I40E_WRITE_REG(hw, I40E_PRTQF_FLX_PIT(field_idx), > flx_pit); > min_next_off++; > } > - > - pf->fdir.flex_pit_flag[layer_idx] =3D 1; > } >=20 > static int > @@ -1686,7 +1685,7 @@ i40e_flow_add_del_fdir_filter(struct rte_eth_dev > *dev, > i40e_fdir_filter_convert(filter, &check_filter); >=20 > if (add) { > - if (!filter->input.flow_ext.customized_pctype) { > + if (filter->input.flow_ext.is_flex_flow) { > for (i =3D 0; i < filter->input.flow_ext.raw_id; i++) { > layer_idx =3D filter->input.flow_ext.layer_idx; > field_idx =3D layer_idx * > I40E_MAX_FLXPLD_FIED + i; @@ -1738,6 +1737,9 @@ > i40e_flow_add_del_fdir_filter(struct rte_eth_dev *dev, > fdir_info->fdir_guarantee_free_space > 0) > wait_status =3D false; > } else { > + if (filter->input.flow_ext.is_flex_flow) > + layer_idx =3D filter->input.flow_ext.layer_idx; > + > node =3D i40e_sw_fdir_filter_lookup(fdir_info, > &check_filter.fdir.input); > if (!node) { > @@ -1785,6 +1787,17 @@ i40e_flow_add_del_fdir_filter(struct rte_eth_dev > *dev, > goto error_op; > } >=20 > + if (filter->input.flow_ext.is_flex_flow) { > + if (add) { > + fdir_info->flex_flow_count[layer_idx]++; > + pf->fdir.flex_pit_flag[layer_idx] =3D 1; > + } else { > + fdir_info->flex_flow_count[layer_idx]--; > + if (!fdir_info->flex_flow_count[layer_idx]) > + pf->fdir.flex_pit_flag[layer_idx] =3D 0; > + } > + } > + > if (add) { > fdir_info->fdir_actual_cnt++; > if (fdir_info->fdir_invalprio =3D=3D 1 && diff --git > a/drivers/net/i40e/i40e_flow.c b/drivers/net/i40e/i40e_flow.c index > b09ff6590d..bbd666b7a0 100644 > --- a/drivers/net/i40e/i40e_flow.c > +++ b/drivers/net/i40e/i40e_flow.c > @@ -3069,6 +3069,7 @@ i40e_flow_parse_fdir_pattern(struct rte_eth_dev > *dev, > &flex_pit, sizeof(struct i40e_fdir_flex_pit)); > filter->input.flow_ext.layer_idx =3D layer_idx; > filter->input.flow_ext.raw_id =3D raw_id; > + filter->input.flow_ext.is_flex_flow =3D true; > break; > case RTE_FLOW_ITEM_TYPE_VF: > vf_spec =3D item->spec; > @@ -5515,6 +5516,9 @@ i40e_flow_flush_fdir_filter(struct i40e_pf *pf) > pf->fdir.flex_mask_flag[pctype] =3D 0; > } >=20 > + for (i =3D 0; i < I40E_MAX_FLXPLD_LAYER; i++) > + pf->fdir.flex_pit_flag[i] =3D 0; > + > /* Disable FDIR processing as all FDIR rules are now flushed > */ > i40e_fdir_rx_proc_enable(dev, 0); > } > -- > 2.26.2