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 C4B53A050C for ; Thu, 7 Apr 2022 09:16:35 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B684C410DC; Thu, 7 Apr 2022 09:16:35 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id 170894014F; Thu, 7 Apr 2022 09:16:32 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1649315793; x=1680851793; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=5WWQg8JHx6EvnfK3ZbBkWwzMeSvj6Lcd/hih6P0Akuk=; b=PZoTR5nBBKwW8xiGLvLFKC83jdiqdjLBXbGnf3DU8V2roMm2UZ8tnRmr jTX7Vp072hsRTvdOof5zHAsVZ6ySbhQOvsHOD2Co29j0J4lEGSDDVv/tN Zp81T3iplMKhbnVe+f6rp7Li/dhQW4zStTt+1M4kq/+J/2MYkW3MesO9T efNZO1BpFAOLjfQVuFZNaEqk99BDV+GxfaOdfNHYMtUOlFRGwumoObvyo qztw4q6dnMdX874/sFiqPsWPOETd/it74eSUKsbvsE+Rl6HrAa1spKWVM 8Fb9vdTIeHNr3R5Aq121el+7lL+kT8pS5oYRayxM0ynntO3RI+6OKlCp4 w==; X-IronPort-AV: E=McAfee;i="6200,9189,10309"; a="261242505" X-IronPort-AV: E=Sophos;i="5.90,241,1643702400"; d="scan'208";a="261242505" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Apr 2022 00:16:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,241,1643702400"; d="scan'208";a="609217500" Received: from fmsmsx606.amr.corp.intel.com ([10.18.126.86]) by fmsmga008.fm.intel.com with ESMTP; 07 Apr 2022 00:16:31 -0700 Received: from fmsmsx605.amr.corp.intel.com (10.18.126.85) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Thu, 7 Apr 2022 00:16:31 -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; Thu, 7 Apr 2022 00:16:30 -0700 From: "Zhang, Qi Z" To: "Xu, Ting" , "Guo, Junfeng" CC: "dev@dpdk.org" , "Yang, Qiming" , "stable@dpdk.org" Subject: RE: [PATCH v2] net/ice: refact parser API usage Thread-Topic: [PATCH v2] net/ice: refact parser API usage Thread-Index: AQHYSji5hE/GhehE00eA1cMrD1nXPKzkduKA//+TSgA= Date: Thu, 7 Apr 2022 07:16:30 +0000 Message-ID: <175495afcf014d35b767cf09e152fb7c@intel.com> References: <20220407124011.667415-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: 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 > -----Original Message----- > From: Xu, Ting > Sent: Thursday, April 7, 2022 2:45 PM > To: Zhang, Qi Z ; Guo, Junfeng > > Cc: dev@dpdk.org; Yang, Qiming ; > stable@dpdk.org > Subject: RE: [PATCH v2] net/ice: refact parser API usage >=20 > > -----Original Message----- > > From: Zhang, Qi Z > > Sent: Thursday, April 7, 2022 8:40 PM > > To: Guo, Junfeng ; Xu, Ting > > Cc: dev@dpdk.org; Yang, Qiming ; Zhang, Qi Z > > ; stable@dpdk.org > > Subject: [PATCH v2] 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 > > --- > > drivers/net/ice/ice_ethdev.c | 10 ++++++++++ > > drivers/net/ice/ice_ethdev.h | 1 + > > drivers/net/ice/ice_fdir_filter.c | 15 +++++---------- > > drivers/net/ice/ice_generic_flow.c | 8 ++++++++ > > 4 files changed, 24 insertions(+), 10 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..894e593dc7 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,10 @@ 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 +1875,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 +1923,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); > > >=20 > Hi, Qi, in RSS there are similar steps, we may need to change as well. Sh= all I > give you a patch? OK, I see, I will add it in v3, thanks >=20 > > 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 * > > -- > > 2.31.1 >=20