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

Fixes: 5b8d2d89dd99 (net/i40e: enable multi-queue Rx interrupt for VF)

Signed-off-by: Lunyuan Cui <lunyuanx....@intel.com>
---
 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

Reply via email to