All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Xing, Beilei" <beilei.xing@intel.com>
To: "Sun, Chenmin" <chenmin.sun@intel.com>,
	"Zhang, Qi Z" <qi.z.zhang@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH V2] net/i40e: fix fdir cannot receive rx writeback issue
Date: Thu, 16 Jul 2020 08:25:34 +0000	[thread overview]
Message-ID: <MN2PR11MB38073ED38E7D06A849E6A731F77F0@MN2PR11MB3807.namprd11.prod.outlook.com> (raw)
In-Reply-To: <20200715230358.32562-1-chenmin.sun@intel.com>



> -----Original Message-----
> From: Sun, Chenmin <chenmin.sun@intel.com>
> Sent: Thursday, July 16, 2020 7:04 AM
> To: Zhang, Qi Z <qi.z.zhang@intel.com>; Xing, Beilei <beilei.xing@intel.com>
> Cc: dev@dpdk.org; Sun, Chenmin <chenmin.sun@intel.com>
> Subject: [PATCH V2] net/i40e: fix fdir cannot receive rx writeback issue
> 
> From: Chenmin Sun <chenmin.sun@intel.com>
> 
> This patch fixes the fdir cannot receive rx writeback packet issue, by setting the
> fdir_vsi->nb_used_qps to 1.

Better to describe what's the root cause but not how to set the detailed value.
The root cause should be FDIR interrupt is not enabled successfully.

> Besides this, to make sure fdir programming works fine when the port is
> stopped, move the fdir interrupt configure from start/stop to setup/teardown.
> 
> Fixes: cfd662d22e ("net/i40e: fix interrupt throttling setting in PF")
> 
> Signed-off-by: Chenmin Sun <chenmin.sun@intel.com>
> ---
> 
> v2:
> * Fix commit message typo
> ---
>  drivers/net/i40e/i40e_ethdev.c | 15 ++-------------
> drivers/net/i40e/i40e_ethdev.h |  2 ++
>  drivers/net/i40e/i40e_fdir.c   | 11 +++++++++++
>  3 files changed, 15 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
> index 393b5320f..8933a39f2 100644
> --- a/drivers/net/i40e/i40e_ethdev.c
> +++ b/drivers/net/i40e/i40e_ethdev.c
> @@ -2068,7 +2068,7 @@ i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi,
> uint16_t itr_idx)
>  	}
>  }
> 
> -static void
> +void
>  i40e_vsi_enable_queues_intr(struct i40e_vsi *vsi)  {
>  	struct rte_eth_dev *dev = vsi->adapter->eth_dev; @@ -2095,7 +2095,7
> @@ i40e_vsi_enable_queues_intr(struct i40e_vsi *vsi)
>  	I40E_WRITE_FLUSH(hw);
>  }
> 
> -static void
> +void
>  i40e_vsi_disable_queues_intr(struct i40e_vsi *vsi)  {
>  	struct rte_eth_dev *dev = vsi->adapter->eth_dev; @@ -2317,13
> +2317,6 @@ i40e_dev_start(struct rte_eth_dev *dev)
>  		i40e_vsi_enable_queues_intr(pf->vmdq[i].vsi);
>  	}
> 
> -	/* enable FDIR MSIX interrupt */
> -	if (pf->fdir.fdir_vsi) {
> -		i40e_vsi_queues_bind_intr(pf->fdir.fdir_vsi,
> -					  I40E_ITR_INDEX_NONE);
> -		i40e_vsi_enable_queues_intr(pf->fdir.fdir_vsi);
> -	}
> -
>  	/* Enable all queues which have been configured */
>  	for (nb_rxq = 0; nb_rxq < dev->data->nb_rx_queues; nb_rxq++) {
>  		ret = i40e_dev_rx_queue_start(dev, nb_rxq); @@ -2459,10
> +2452,6 @@ i40e_dev_stop(struct rte_eth_dev *dev)
>  		i40e_vsi_queues_unbind_intr(pf->vmdq[i].vsi);
>  	}
> 
> -	if (pf->fdir.fdir_vsi) {
> -		i40e_vsi_queues_unbind_intr(pf->fdir.fdir_vsi);
> -		i40e_vsi_disable_queues_intr(pf->fdir.fdir_vsi);
> -	}
>  	/* Clear all queues and release memory */
>  	i40e_dev_clear_queues(dev);
> 
> diff --git a/drivers/net/i40e/i40e_ethdev.h b/drivers/net/i40e/i40e_ethdev.h
> index 31ca05de9..886c98b15 100644
> --- a/drivers/net/i40e/i40e_ethdev.h
> +++ b/drivers/net/i40e/i40e_ethdev.h
> @@ -1268,6 +1268,7 @@ void i40e_pf_enable_irq0(struct i40e_hw *hw);  int
> i40e_dev_link_update(struct rte_eth_dev *dev, int wait_to_complete);  void
> i40e_vsi_queues_bind_intr(struct i40e_vsi *vsi, uint16_t itr_idx);  void
> i40e_vsi_queues_unbind_intr(struct i40e_vsi *vsi);
> +void i40e_vsi_disable_queues_intr(struct i40e_vsi *vsi);
>  int i40e_vsi_vlan_pvid_set(struct i40e_vsi *vsi,
>  			   struct i40e_vsi_vlan_pvid_info *info);  int
> i40e_vsi_config_vlan_stripping(struct i40e_vsi *vsi, bool on); @@ -1277,6
> +1278,7 @@ uint64_t i40e_parse_hena(const struct i40e_adapter *adapter,
> uint64_t flags);  enum i40e_status_code i40e_fdir_setup_tx_resources(struct
> i40e_pf *pf);  enum i40e_status_code i40e_fdir_setup_rx_resources(struct
> i40e_pf *pf);  int i40e_fdir_setup(struct i40e_pf *pf);
> +void i40e_vsi_enable_queues_intr(struct i40e_vsi *vsi);
>  const struct rte_memzone *i40e_memzone_reserve(const char *name,
>  					uint32_t len,
>  					int socket_id);
> diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c index
> 71eb31fb8..60eeccc1a 100644
> --- a/drivers/net/i40e/i40e_fdir.c
> +++ b/drivers/net/i40e/i40e_fdir.c
> @@ -228,6 +228,11 @@ i40e_fdir_setup(struct i40e_pf *pf)
>  		goto fail_mem;
>  	}
> 
> +	/* enable FDIR MSIX interrupt */
> +	vsi->nb_used_qps = 1;
> +	i40e_vsi_queues_bind_intr(vsi, I40E_ITR_INDEX_NONE);
> +	i40e_vsi_enable_queues_intr(vsi);
> +
>  	/* reserve memory for the fdir programming packet */
>  	snprintf(z_name, sizeof(z_name), "%s_%s_%d",
>  			eth_dev->device->driver->name,
> @@ -274,12 +279,18 @@ i40e_fdir_teardown(struct i40e_pf *pf)
>  	vsi = pf->fdir.fdir_vsi;
>  	if (!vsi)
>  		return;
> +
> +	/* disable FDIR MSIX interrupt */
> +	i40e_vsi_queues_unbind_intr(vsi);
> +	i40e_vsi_disable_queues_intr(vsi);
> +
>  	int err = i40e_switch_tx_queue(hw, vsi->base_queue, FALSE);
>  	if (err)
>  		PMD_DRV_LOG(DEBUG, "Failed to do FDIR TX switch off");
>  	err = i40e_switch_rx_queue(hw, vsi->base_queue, FALSE);
>  	if (err)
>  		PMD_DRV_LOG(DEBUG, "Failed to do FDIR RX switch off");
> +
>  	i40e_dev_rx_queue_release(pf->fdir.rxq);
>  	rte_eth_dma_zone_free(dev, "fdir_rx_ring", pf->fdir.rxq->queue_id);
>  	pf->fdir.rxq = NULL;
> --
> 2.17.1


  reply	other threads:[~2020-07-16  8:27 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-15 22:48 [dpdk-dev] [PATCH] net/i40e: fix fdir cannot receive rx writeback issue chenmin.sun
2020-07-15 23:03 ` [dpdk-dev] [PATCH V2] " chenmin.sun
2020-07-16  8:25   ` Xing, Beilei [this message]
2020-07-17 14:57   ` [dpdk-dev] [PATCH v3] " chenmin.sun
2020-07-17 14:48     ` Xing, Beilei
2020-07-20  9:51       ` Zhang, Qi Z

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=MN2PR11MB38073ED38E7D06A849E6A731F77F0@MN2PR11MB3807.namprd11.prod.outlook.com \
    --to=beilei.xing@intel.com \
    --cc=chenmin.sun@intel.com \
    --cc=dev@dpdk.org \
    --cc=qi.z.zhang@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.