When we config RX queue with 2048 RX queue size, and stop the
device, changed queue size to 4096 and then start the device,
there will be segment fault. We should allocate RX ring for
max possible number of hardware descriptors.

Signed-off-by: Nick Zhang <n...@opencloud.tech>
---
 drivers/net/vmxnet3/vmxnet3_rxtx.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c 
b/drivers/net/vmxnet3/vmxnet3_rxtx.c
index e77374f..d5d7c33 100644
--- a/drivers/net/vmxnet3/vmxnet3_rxtx.c
+++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c
@@ -977,8 +977,11 @@
        comp_ring->next2proc = 0;
        comp_ring->gen = VMXNET3_INIT_GEN;
 
-       size = sizeof(struct Vmxnet3_RxDesc) * (ring0->size + ring1->size);
-       size += sizeof(struct Vmxnet3_RxCompDesc) * comp_ring->size;
+       /* Allocate RX ring for max possible number of hardware descriptors. */
+       size = sizeof(struct Vmxnet3_RxDesc) *
+               (VMXNET3_RX_RING_MAX_SIZE * VMXNET3_RX_CMDRING_SIZE);
+       size += sizeof(struct Vmxnet3_RxCompDesc) *
+               (VMXNET3_RX_RING_MAX_SIZE * VMXNET3_RX_CMDRING_SIZE);
 
        mz = ring_dma_zone_reserve(dev, "rxdesc", queue_idx, size, socket_id);
        if (mz == NULL) {
-- 
1.8.3.1



Reply via email to