From: chenmin.sun@intel.com
To: qi.z.zhang@intel.com, beilei.xing@intel.com
Cc: dev@dpdk.org, chenmin.sun@intel.com
Subject: [dpdk-dev] [PATCH] net/i40e: fix fdir cannot receive rx writeback issue
Date: Thu, 16 Jul 2020 06:48:50 +0800 [thread overview]
Message-ID: <20200715224850.31764-1-chenmin.sun@intel.com> (raw)
From: Chenmin Sun <chenmin.sun@intel.com>
This patch fixes the fdir connot receive rx writeback packet issue,
by setting the fdir_vsi->nb_used_qps to 1.
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>
---
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
next reply other threads:[~2020-07-15 13:51 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-15 22:48 chenmin.sun [this message]
2020-07-15 23:03 ` [dpdk-dev] [PATCH V2] " chenmin.sun
2020-07-16 8:25 ` Xing, Beilei
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=20200715224850.31764-1-chenmin.sun@intel.com \
--to=chenmin.sun@intel.com \
--cc=beilei.xing@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).