Skip to content

Commit f00e2b0

Browse files
nhormandavem330
authored andcommitted
vmxnet3: adjust ring sizes when interface is down
If ethtool is used to update ring sizes on a vmxnet3 interface that isn't running, the change isn't stored, meaning the ring update is effectively is ignored and lost without any indication to the user. Other network drivers store the ring size update so that ring allocation uses the new sizes next time the interface is brought up. This patch modifies vmxnet3 to behave this way as well Signed-off-by: Neil Horman <nhorman@tuxdriver.com> CC: "David S. Miller" <davem@davemloft.net> CC: Shreyas Bhatewara <sbhatewara@vmware.com> CC: "VMware, Inc." <pv-drivers@vmware.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 7171511 commit f00e2b0

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

drivers/net/vmxnet3/vmxnet3_drv.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2589,8 +2589,8 @@ vmxnet3_open(struct net_device *netdev)
25892589
for (i = 0; i < adapter->num_tx_queues; i++)
25902590
spin_lock_init(&adapter->tx_queue[i].tx_lock);
25912591

2592-
err = vmxnet3_create_queues(adapter, VMXNET3_DEF_TX_RING_SIZE,
2593-
VMXNET3_DEF_RX_RING_SIZE,
2592+
err = vmxnet3_create_queues(adapter, adapter->tx_ring_size,
2593+
adapter->rx_ring_size,
25942594
VMXNET3_DEF_RX_RING_SIZE);
25952595
if (err)
25962596
goto queue_err;
@@ -2968,6 +2968,9 @@ vmxnet3_probe_device(struct pci_dev *pdev,
29682968
adapter->netdev = netdev;
29692969
adapter->pdev = pdev;
29702970

2971+
adapter->tx_ring_size = VMXNET3_DEF_TX_RING_SIZE;
2972+
adapter->rx_ring_size = VMXNET3_DEF_RX_RING_SIZE;
2973+
29712974
spin_lock_init(&adapter->cmd_lock);
29722975
adapter->adapter_pa = dma_map_single(&adapter->pdev->dev, adapter,
29732976
sizeof(struct vmxnet3_adapter),

drivers/net/vmxnet3/vmxnet3_ethtool.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -449,8 +449,8 @@ vmxnet3_get_ringparam(struct net_device *netdev,
449449
param->rx_mini_max_pending = 0;
450450
param->rx_jumbo_max_pending = 0;
451451

452-
param->rx_pending = adapter->rx_queue[0].rx_ring[0].size;
453-
param->tx_pending = adapter->tx_queue[0].tx_ring.size;
452+
param->rx_pending = adapter->rx_ring_size;
453+
param->tx_pending = adapter->tx_ring_size;
454454
param->rx_mini_pending = 0;
455455
param->rx_jumbo_pending = 0;
456456
}
@@ -529,9 +529,11 @@ vmxnet3_set_ringparam(struct net_device *netdev,
529529
* size */
530530
netdev_err(netdev, "failed to apply new sizes, "
531531
"try the default ones\n");
532+
new_rx_ring_size = VMXNET3_DEF_RX_RING_SIZE;
533+
new_tx_ring_size = VMXNET3_DEF_TX_RING_SIZE;
532534
err = vmxnet3_create_queues(adapter,
533-
VMXNET3_DEF_TX_RING_SIZE,
534-
VMXNET3_DEF_RX_RING_SIZE,
535+
new_tx_ring_size,
536+
new_rx_ring_size,
535537
VMXNET3_DEF_RX_RING_SIZE);
536538
if (err) {
537539
netdev_err(netdev, "failed to create queues "
@@ -545,6 +547,8 @@ vmxnet3_set_ringparam(struct net_device *netdev,
545547
netdev_err(netdev, "failed to re-activate, error %d."
546548
" Closing it\n", err);
547549
}
550+
adapter->tx_ring_size = new_tx_ring_size;
551+
adapter->rx_ring_size = new_rx_ring_size;
548552

549553
out:
550554
clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);

drivers/net/vmxnet3/vmxnet3_int.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,11 @@ struct vmxnet3_adapter {
349349
u32 link_speed; /* in mbps */
350350

351351
u64 tx_timeout_count;
352+
353+
/* Ring sizes */
354+
u32 tx_ring_size;
355+
u32 rx_ring_size;
356+
352357
struct work_struct work;
353358

354359
unsigned long state; /* VMXNET3_STATE_BIT_xxx */

0 commit comments

Comments
 (0)