All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Zhang, Qi Z" <qi.z.zhang@intel.com>
To: "Xu, Ting" <ting.xu@intel.com>, "Guo, Junfeng" <junfeng.guo@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>,
	"Yang, Qiming" <qiming.yang@intel.com>,
	"stable@dpdk.org" <stable@dpdk.org>
Subject: RE: [PATCH v2] net/ice: refact parser API usage
Date: Thu, 7 Apr 2022 07:16:30 +0000	[thread overview]
Message-ID: <175495afcf014d35b767cf09e152fb7c@intel.com> (raw)
In-Reply-To: <SN6PR11MB3261603D95D3C8BC79F58567F8E69@SN6PR11MB3261.namprd11.prod.outlook.com>



> -----Original Message-----
> From: Xu, Ting <ting.xu@intel.com>
> Sent: Thursday, April 7, 2022 2:45 PM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>; Guo, Junfeng
> <junfeng.guo@intel.com>
> Cc: dev@dpdk.org; Yang, Qiming <qiming.yang@intel.com>;
> stable@dpdk.org
> Subject: RE: [PATCH v2] net/ice: refact parser API usage
> 
> > -----Original Message-----
> > From: Zhang, Qi Z <qi.z.zhang@intel.com>
> > Sent: Thursday, April 7, 2022 8:40 PM
> > To: Guo, Junfeng <junfeng.guo@intel.com>; Xu, Ting <ting.xu@intel.com>
> > Cc: dev@dpdk.org; Yang, Qiming <qiming.yang@intel.com>; Zhang, Qi Z
> > <qi.z.zhang@intel.com>; stable@dpdk.org
> > Subject: [PATCH v2] net/ice: refact parser API usage
> >
> > Not necessary to create / destroy a parser instance for every raw packet
> 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 <qi.z.zhang@intel.com>
> > ---
> >  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 = 0;
> >  	struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data-
> > >dev_private);
> > +	struct ice_adapter *ad =
> > +		ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
> >
> >  	if (udp_tunnel == 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 = ice_create_tunnel(hw, TNL_VXLAN, udp_tunnel-
> > >udp_port);
> > +		if (!ret && ad->psr != 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 = 0;
> >  	struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data-
> > >dev_private);
> > +	struct ice_adapter *ad =
> > +		ICE_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
> >
> >  	if (udp_tunnel == 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 = ice_destroy_tunnel(hw, udp_tunnel->udp_port, 0);
> > +		if (!ret && ad->psr != 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 = NULL;
> >  	struct ice_fdir_v6 *p_v6 = NULL;
> >  	struct ice_parser_result rslt;
> > -	struct ice_parser *psr;
> >  	uint8_t item_num = 0;
> >
> >  	for (item = pattern; item->type != 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 == NULL)
> > +				return -rte_errno;
> > +
> >  			raw_spec = item->spec;
> >  			raw_mask = 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 =
> >  				(uint8_t *)(uintptr_t)raw_mask->pattern;
> > -			uint16_t udp_port = 0;
> >  			uint16_t tmp_val = 0;
> >  			uint8_t pkt_len = 0;
> >  			uint8_t tmp = 0;
> > @@ -1921,15 +1923,8 @@ ice_fdir_parse_pattern(__rte_unused struct
> > ice_adapter *ad,
> >
> >  			pkt_len /= 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);
> >
> 
> Hi, Qi, in RSS there are similar steps, we may need to change as well. Shall I
> give you a patch?

OK, I see, I will add it in v3, thanks

> 
> >  			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) != 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 == 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 != NULL) {
> > +		ice_parser_destroy(ad->psr);
> > +		ad->psr = NULL;
> > +	}
> >  }
> >
> >  static struct ice_parser_list *
> > --
> > 2.31.1
> 


      reply	other threads:[~2022-04-07  7:16 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-07 12:40 [PATCH v2] net/ice: refact parser API usage Qi Zhang
2022-04-07  6:44 ` Xu, Ting
2022-04-07  7:16   ` Zhang, Qi Z [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=175495afcf014d35b767cf09e152fb7c@intel.com \
    --to=qi.z.zhang@intel.com \
    --cc=dev@dpdk.org \
    --cc=junfeng.guo@intel.com \
    --cc=qiming.yang@intel.com \
    --cc=stable@dpdk.org \
    --cc=ting.xu@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.