We should allocate Tx ring for max possible mumber of hardware descriptors.
If we config Tx queue with 2048 Tx queue size, and 4096 soon,
there will be segment fault.

Signed-off-by: nickcooper-zhangtonghao <n...@opencloud.tech>
---
 drivers/net/vmxnet3/vmxnet3_rxtx.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c 
b/drivers/net/vmxnet3/vmxnet3_rxtx.c
index f00b3b9..5f35a2e 100644
--- a/drivers/net/vmxnet3/vmxnet3_rxtx.c
+++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c
@@ -874,9 +874,10 @@
        comp_ring->next2proc = 0;
        comp_ring->gen = VMXNET3_INIT_GEN;
 
-       size = sizeof(struct Vmxnet3_TxDesc) * ring->size;
-       size += sizeof(struct Vmxnet3_TxCompDesc) * comp_ring->size;
-       size += sizeof(struct Vmxnet3_TxDataDesc) * data_ring->size;
+       /* Allocate Tx ring for max possible number of hardware descriptors. */
+       size = sizeof(struct Vmxnet3_TxDesc) * VMXNET3_TX_RING_MAX_SIZE;
+       size += sizeof(struct Vmxnet3_TxCompDesc) * VMXNET3_TX_RING_MAX_SIZE;
+       size += sizeof(struct Vmxnet3_TxDataDesc) * VMXNET3_TX_RING_MAX_SIZE;
 
        mz = ring_dma_zone_reserve(dev, "txdesc", queue_idx, size, socket_id);
        if (mz == NULL) {
-- 
1.8.3.1



Reply via email to