[v3] net/i40e: fix multi-queue Rx interrupt for VF
Checks
Commit Message
The vector id bound to each queue could not large than the max
usable vector. It will cause port start failed. This patch fixed
this issue.
And in this patch I changed judgement condition for the limit
of vector id. vf->vf_res->max_vectors represents the number of
usable vectors. It can effectively prevent vector id out of range.
Fixes: 5b8d2d89dd99 (net/i40e: enable multi-queue Rx interrupt for VF)
Signed-off-by: Lunyuan Cui <lunyuanx.cui@intel.com>
---
v3:
- Change commit message
v2:
- Change commit message
---
drivers/net/i40e/i40e_ethdev_vf.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
@@ -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;
}