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 DC994A0508; Wed, 13 Apr 2022 09:33:59 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D4B63427FE; Wed, 13 Apr 2022 09:33:59 +0200 (CEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by mails.dpdk.org (Postfix) with ESMTP id B89744068B; Wed, 13 Apr 2022 09:33:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1649835238; x=1681371238; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=Z8JK2C92OvXN+tQ5HzaBUrWoxwlc007k/iBiOegOqz0=; b=jYtsiZ80WODRc5+rEI0UAJpb7rCXUaoyb+8DDqXa89HTGdaobHnYkQse nu+JsmoMBwDFg5ynTOV6o2h6WfIbBjXZ/G5v6THhOpRFodAt2WQ8Yhhgi pwpzcE6x+AWAp3TrT5+fGEVAzd4XpLZz7afEUjucX/cQSMUTomq+5XkR4 J7cMYj7ENSg617TU/PwOdbRBl4pkCF5LIj8HWGeSJoJdNUWoYdYncc6II N7vqv3y1RBLkmmUDE5dY3L+FzhhDuDKfFYJkZyVow72dSQiFo/5Y9qPNc qvdJ4fI8h2I9E9jkPSzF4+nnoIdtvKIIiC9J7gAkXTpe49u7Ws3JL6Hda w==; X-IronPort-AV: E=McAfee;i="6400,9594,10315"; a="243182648" X-IronPort-AV: E=Sophos;i="5.90,256,1643702400"; d="scan'208";a="243182648" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2022 00:33:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,256,1643702400"; d="scan'208";a="526835402" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by orsmga006.jf.intel.com with ESMTP; 13 Apr 2022 00:33:56 -0700 Received: from fmsmsx605.amr.corp.intel.com (10.18.126.85) 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.2308.27; Wed, 13 Apr 2022 00:33:56 -0700 Received: from fmsmsx605.amr.corp.intel.com ([10.18.126.85]) by fmsmsx605.amr.corp.intel.com ([10.18.126.85]) with mapi id 15.01.2308.027; Wed, 13 Apr 2022 00:33:56 -0700 From: "Zhang, Qi Z" To: "Xu, Ting" , "Guo, Junfeng" CC: "dev@dpdk.org" , "Yang, Qiming" , "stable@dpdk.org" Subject: RE: [PATCH v3] net/ice: refact parser API usage Thread-Topic: [PATCH v3] net/ice: refact parser API usage Thread-Index: AQHYSlWE1QPmIiv3BEaHIHa5mXW906zt7y6A//+NucA= Date: Wed, 13 Apr 2022 07:33:55 +0000 Message-ID: References: <20220407160614.886439-1-qi.z.zhang@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.6.401.20 dlp-product: dlpe-windows x-originating-ip: [10.239.127.36] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 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 > -----Original Message----- > From: Xu, Ting > Sent: Wednesday, April 13, 2022 3:23 PM > To: Zhang, Qi Z ; Guo, Junfeng > > Cc: dev@dpdk.org; Yang, Qiming ; > stable@dpdk.org > Subject: RE: [PATCH v3] net/ice: refact parser API usage >=20 > > -----Original Message----- > > From: Zhang, Qi Z > > Sent: Friday, April 8, 2022 12:06 AM > > To: Guo, Junfeng ; Xu, Ting > > Cc: dev@dpdk.org; Yang, Qiming ; Zhang, Qi Z > > ; stable@dpdk.org > > Subject: [PATCH v3] net/ice: refact parser API usage > > > > Not necessary to create / destroy a parser instance for every raw packe= t > rule. > > A global parser instance will be created in ice_flow_init and be > > destroyed in ice_flow_uninit. > > > > Also, ice_dev_udp_tunnel_port_add has been hooked to perform > > corresponding parser configure. This also fix the issue that RSS > > engine can't support VXLAN inner through raw packet filter. > > > > Fixes: 1b9c68120a1c ("net/ice: enable protocol agnostic flow > > offloading in > > RSS") > > Cc: stable@dpdk.org > > > > Signed-off-by: Qi Zhang > > --- > > > > v3: > > - add missing refact in ice_hash.c > > > > v2: > > - typo fix. > > > > drivers/net/ice/ice_ethdev.c | 10 ++++++++++ > > drivers/net/ice/ice_ethdev.h | 1 + > > drivers/net/ice/ice_fdir_filter.c | 14 ++++---------- > > drivers/net/ice/ice_generic_flow.c | 8 ++++++++ > > drivers/net/ice/ice_hash.c | 9 ++++----- > > 5 files changed, 27 insertions(+), 15 deletions(-) > > > > diff --git a/drivers/net/ice/ice_ethdev.c > > b/drivers/net/ice/ice_ethdev.c index 73e550f5fb..8bb34b874b 100644 > > --- a/drivers/net/ice/ice_ethdev.c > > +++ b/drivers/net/ice/ice_ethdev.c > > @@ -5621,6 +5621,8 @@ ice_dev_udp_tunnel_port_add(struct > rte_eth_dev > > *dev, { > > int ret =3D 0; > > struct ice_hw *hw =3D ICE_DEV_PRIVATE_TO_HW(dev->data- > > >dev_private); > > + struct ice_adapter *ad =3D > > + ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); > > > > if (udp_tunnel =3D=3D NULL) > > return -EINVAL; > > @@ -5628,6 +5630,9 @@ ice_dev_udp_tunnel_port_add(struct > rte_eth_dev > > *dev, > > switch (udp_tunnel->prot_type) { > > case RTE_ETH_TUNNEL_TYPE_VXLAN: > > ret =3D ice_create_tunnel(hw, TNL_VXLAN, udp_tunnel- > > >udp_port); > > + if (!ret && ad->psr !=3D NULL) > > + ice_parser_vxlan_tunnel_set(ad->psr, > > + udp_tunnel->udp_port, true); > > break; > > default: > > PMD_DRV_LOG(ERR, "Invalid tunnel type"); @@ -5645,6 > > +5650,8 @@ ice_dev_udp_tunnel_port_del(struct rte_eth_dev *dev, { > > int ret =3D 0; > > struct ice_hw *hw =3D ICE_DEV_PRIVATE_TO_HW(dev->data- > > >dev_private); > > + struct ice_adapter *ad =3D > > + ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); > > > > if (udp_tunnel =3D=3D NULL) > > return -EINVAL; > > @@ -5652,6 +5659,9 @@ ice_dev_udp_tunnel_port_del(struct > rte_eth_dev > > *dev, > > switch (udp_tunnel->prot_type) { > > case RTE_ETH_TUNNEL_TYPE_VXLAN: > > ret =3D ice_destroy_tunnel(hw, udp_tunnel->udp_port, 0); > > + if (!ret && ad->psr !=3D NULL) > > + ice_parser_vxlan_tunnel_set(ad->psr, > > + udp_tunnel->udp_port, false); > > break; > > default: > > PMD_DRV_LOG(ERR, "Invalid tunnel type"); diff --git > > a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h index > > 3ab310628f..3d8427225f 100644 > > --- a/drivers/net/ice/ice_ethdev.h > > +++ b/drivers/net/ice/ice_ethdev.h > > @@ -561,6 +561,7 @@ struct ice_adapter { > > struct ice_rss_prof_info rss_prof_info[ICE_MAX_PTGS]; > > /* True if DCF state of the associated PF is on */ > > bool dcf_state_on; > > + struct ice_parser *psr; > > #ifdef RTE_ARCH_X86 > > bool rx_use_avx2; > > bool rx_use_avx512; > > diff --git a/drivers/net/ice/ice_fdir_filter.c > > b/drivers/net/ice/ice_fdir_filter.c > > index 7954c6d8ea..0982478feb 100644 > > --- a/drivers/net/ice/ice_fdir_filter.c > > +++ b/drivers/net/ice/ice_fdir_filter.c > > @@ -1826,7 +1826,6 @@ ice_fdir_parse_pattern(__rte_unused struct > > ice_adapter *ad, > > struct ice_fdir_v4 *p_v4 =3D NULL; > > struct ice_fdir_v6 *p_v6 =3D NULL; > > struct ice_parser_result rslt; > > - struct ice_parser *psr; > > uint8_t item_num =3D 0; > > > > for (item =3D pattern; item->type !=3D RTE_FLOW_ITEM_TYPE_END; > > item++) { @@ -1861,6 +1860,9 @@ ice_fdir_parse_pattern(__rte_unused > > struct ice_adapter *ad, > > > > switch (item_type) { > > case RTE_FLOW_ITEM_TYPE_RAW: { > > + if (ad->psr =3D=3D NULL) > > + return -rte_errno; > > + > > raw_spec =3D item->spec; > > raw_mask =3D item->mask; > > > > @@ -1872,7 +1874,6 @@ ice_fdir_parse_pattern(__rte_unused struct > > ice_adapter *ad, > > (uint8_t *)(uintptr_t)raw_spec->pattern; > > unsigned char *tmp_mask =3D > > (uint8_t *)(uintptr_t)raw_mask->pattern; > > - uint16_t udp_port =3D 0; > > uint16_t tmp_val =3D 0; > > uint8_t pkt_len =3D 0; > > uint8_t tmp =3D 0; > > @@ -1921,15 +1922,8 @@ ice_fdir_parse_pattern(__rte_unused struct > > ice_adapter *ad, > > > > pkt_len /=3D 2; > > > > - if (ice_parser_create(&ad->hw, &psr)) > > - return -rte_errno; > > - if (ice_get_open_tunnel_port(&ad->hw, TNL_VXLAN, > > - &udp_port)) > > - ice_parser_vxlan_tunnel_set(psr, udp_port, > > - true); > > - if (ice_parser_run(psr, tmp_spec, pkt_len, &rslt)) > > + if (ice_parser_run(ad->psr, tmp_spec, pkt_len, &rslt)) > > return -rte_errno; > > - ice_parser_destroy(psr); > > > > if (!tmp_mask) > > return -rte_errno; > > diff --git a/drivers/net/ice/ice_generic_flow.c > > b/drivers/net/ice/ice_generic_flow.c > > index 53b1c0b69a..57eb002bde 100644 > > --- a/drivers/net/ice/ice_generic_flow.c > > +++ b/drivers/net/ice/ice_generic_flow.c > > @@ -1831,6 +1831,9 @@ ice_flow_init(struct ice_adapter *ad) > > TAILQ_INIT(&pf->dist_parser_list); > > rte_spinlock_init(&pf->flow_ops_lock); > > > > + if (ice_parser_create(&ad->hw, &ad->psr) !=3D ICE_SUCCESS) > > + PMD_INIT_LOG(WARNING, "Failed to initialize DDP parser, > > raw packet > > +filter will not be supported"); > > + > > RTE_TAILQ_FOREACH_SAFE(engine, &engine_list, node, temp) { > > if (engine->init =3D=3D NULL) { > > PMD_INIT_LOG(ERR, "Invalid engine type (%d)", @@ > > -1885,6 +1888,11 @@ ice_flow_uninit(struct ice_adapter *ad) > > TAILQ_REMOVE(&pf->dist_parser_list, p_parser, node); > > rte_free(p_parser); > > } > > + > > + if (ad->psr !=3D NULL) { > > + ice_parser_destroy(ad->psr); > > + ad->psr =3D NULL; > > + } > > } > > > > static struct ice_parser_list * > > diff --git a/drivers/net/ice/ice_hash.c b/drivers/net/ice/ice_hash.c > > index afbb357fa3..f35727856e 100644 > > --- a/drivers/net/ice/ice_hash.c > > +++ b/drivers/net/ice/ice_hash.c > > @@ -653,13 +653,15 @@ ice_hash_parse_raw_pattern(struct ice_adapter > > *ad, > > const struct rte_flow_item_raw *raw_spec, *raw_mask; > > struct ice_parser_profile prof; > > struct ice_parser_result rslt; > > - struct ice_parser *psr; > > uint8_t *pkt_buf, *msk_buf; > > uint8_t spec_len, pkt_len; > > uint8_t tmp_val =3D 0; > > uint8_t tmp_c =3D 0; > > int i, j; > > > > + if (ad->psr =3D=3D NULL) > > + return -rte_errno; > > + > > raw_spec =3D item->spec; > > raw_mask =3D item->mask; > > > > @@ -713,11 +715,8 @@ ice_hash_parse_raw_pattern(struct ice_adapter > > *ad, > > msk_buf[j] =3D tmp_val * 16 + tmp_c - '0'; > > } > > > > - if (ice_parser_create(&ad->hw, &psr)) > > - return -rte_errno; > > - if (ice_parser_run(psr, pkt_buf, pkt_len, &rslt)) > > + if (ice_parser_run(ad->psr, pkt_buf, pkt_len, &rslt)) > > return -rte_errno; > > - ice_parser_destroy(psr); > > > > if (ice_parser_profile_init(&rslt, pkt_buf, msk_buf, > > pkt_len, ICE_BLK_RSS, true, &prof)) > > -- > > 2.31.1 >=20 > Acked-by: Xu Ting Applied to dpdk-next-net-intel. Thanks Qi