[dpdk-dev] [PATCH v2] net/i40e: fixed multi-queue Rx interrupt for VF

Lunyuan Cui lunyuanx.cui at intel.com
Tue Jan 14 03:04:43 CET 2020


The value of vectors bound to each queue could not large
than the max usable vector. It will let devices start failed.

vf->vf_res->max_vectors is equal to the max vector number.
intr_handle->nb_efd is equal to queue number. Whichever one is
less, it is no need to check intr_handle->nb_efd when we keep
vector value less than vector number.

This patch fixed this issue.

Signed-off-by: Lunyuan Cui <lunyuanx.cui at intel.com>
---
v2:
- Change commit message
---
 drivers/net/i40e/i40e_ethdev_vf.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c
index 479f8282c..d514e8991 100644
--- a/drivers/net/i40e/i40e_ethdev_vf.c
+++ b/drivers/net/i40e/i40e_ethdev_vf.c
@@ -657,7 +657,6 @@ i40evf_config_irq_map(struct rte_eth_dev *dev)
 	struct rte_intr_handle *intr_handle = &pci_dev->intr_handle;
 	uint32_t vector_id;
 	int i, err;
-	uint16_t nb_msix;
 
 	if (dev->data->dev_conf.intr_conf.rxq != 0 &&
 	    rte_intr_allow_others(intr_handle))
@@ -665,9 +664,6 @@ i40evf_config_irq_map(struct rte_eth_dev *dev)
 	else
 		vector_id = I40E_MISC_VEC_ID;
 
-	nb_msix = RTE_MIN(vf->vf_res->max_vectors,
-			intr_handle->nb_efd);
-
 	map_info = (struct virtchnl_irq_map_info *)cmd_buffer;
 	map_info->num_vectors = dev->data->nb_rx_queues;
 	for (i = 0; i < dev->data->nb_rx_queues; i++) {
@@ -682,7 +678,7 @@ i40evf_config_irq_map(struct rte_eth_dev *dev)
 			intr_handle->intr_vec[i] = vector_id;
 		if (vector_id > I40E_MISC_VEC_ID)
 			vector_id++;
-		if (vector_id > nb_msix)
+		if (vector_id >= vf->vf_res->max_vectors)
 			vector_id = I40E_RX_VEC_START;
 	}
 
-- 
2.17.1



More information about the dev mailing list