This patch will check the "nb_desc" parameter for tx queue, release the txq and re-allocation it soon.
Signed-off-by: nickcooper-zhangtonghao <n...@opencloud.tech> --- drivers/net/vmxnet3/vmxnet3_rxtx.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c index d5d7c33..f00b3b9 100644 --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c @@ -828,6 +828,23 @@ return -EINVAL; } + /* Tx vmxnet ring length should be between 512-4096 */ + if (nb_desc < VMXNET3_DEF_TX_RING_SIZE) { + PMD_INIT_LOG(ERR, "VMXNET3 Tx Ring Size Min: %u", + VMXNET3_DEF_TX_RING_SIZE); + return -EINVAL; + } else if (nb_desc > VMXNET3_TX_RING_MAX_SIZE) { + PMD_INIT_LOG(ERR, "VMXNET3 Tx Ring Size Max: %u", + VMXNET3_TX_RING_MAX_SIZE); + return -EINVAL; + } + + /* Free memory prior to re-allocation if needed... */ + if (dev->data->tx_queues[queue_idx] != NULL) { + vmxnet3_dev_tx_queue_release(dev->data->tx_queues[queue_idx]); + dev->data->tx_queues[queue_idx] = NULL; + } + txq = rte_zmalloc("ethdev_tx_queue", sizeof(struct vmxnet3_tx_queue), RTE_CACHE_LINE_SIZE); if (txq == NULL) { @@ -846,19 +863,8 @@ comp_ring = &txq->comp_ring; data_ring = &txq->data_ring; - /* Tx vmxnet ring length should be between 512-4096 */ - if (nb_desc < VMXNET3_DEF_TX_RING_SIZE) { - PMD_INIT_LOG(ERR, "VMXNET3 Tx Ring Size Min: %u", - VMXNET3_DEF_TX_RING_SIZE); - return -EINVAL; - } else if (nb_desc > VMXNET3_TX_RING_MAX_SIZE) { - PMD_INIT_LOG(ERR, "VMXNET3 Tx Ring Size Max: %u", - VMXNET3_TX_RING_MAX_SIZE); - return -EINVAL; - } else { - ring->size = nb_desc; - ring->size &= ~VMXNET3_RING_SIZE_MASK; - } + ring->size = nb_desc; + ring->size &= ~VMXNET3_RING_SIZE_MASK; comp_ring->size = data_ring->size = ring->size; /* Tx vmxnet rings structure initialization*/ -- 1.8.3.1