OSDN Git Service

vmxnet3: remove power of 2 limitation on the queues
authorRonak Doshi <doshir@vmware.com>
Fri, 16 Jul 2021 22:36:22 +0000 (15:36 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 17 Jul 2021 00:32:14 +0000 (17:32 -0700)
With version 6, vmxnet3 relaxes the restriction on queues to
be power of two. This is helpful in cases (Edge VM) where
vcpus are less than 8 and device requires more than 4 queues.

Signed-off-by: Ronak Doshi <doshir@vmware.com>
Acked-by: Guolin Yang <gyang@vmware.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/vmxnet3/vmxnet3_drv.c

index d32fa6f..41e694d 100644 (file)
@@ -3399,7 +3399,6 @@ vmxnet3_probe_device(struct pci_dev *pdev,
        else
 #endif
                num_rx_queues = 1;
-       num_rx_queues = rounddown_pow_of_two(num_rx_queues);
 
        if (enable_mq)
                num_tx_queues = min(VMXNET3_DEVICE_MAX_TX_QUEUES,
@@ -3407,7 +3406,6 @@ vmxnet3_probe_device(struct pci_dev *pdev,
        else
                num_tx_queues = 1;
 
-       num_tx_queues = rounddown_pow_of_two(num_tx_queues);
        netdev = alloc_etherdev_mq(sizeof(struct vmxnet3_adapter),
                                   max(num_tx_queues, num_rx_queues));
        if (!netdev)
@@ -3525,6 +3523,8 @@ vmxnet3_probe_device(struct pci_dev *pdev,
                }
        } else {
                adapter->queuesExtEnabled = false;
+               num_rx_queues = rounddown_pow_of_two(num_rx_queues);
+               num_tx_queues = rounddown_pow_of_two(num_tx_queues);
                adapter->num_rx_queues = min(num_rx_queues,
                                             VMXNET3_DEVICE_DEFAULT_RX_QUEUES);
                adapter->num_tx_queues = min(num_tx_queues,
@@ -3705,7 +3705,9 @@ vmxnet3_remove_device(struct pci_dev *pdev)
        else
 #endif
                num_rx_queues = 1;
-       num_rx_queues = rounddown_pow_of_two(num_rx_queues);
+       if (!VMXNET3_VERSION_GE_6(adapter)) {
+               num_rx_queues = rounddown_pow_of_two(num_rx_queues);
+       }
        if (VMXNET3_VERSION_GE_6(adapter)) {
                spin_lock_irqsave(&adapter->cmd_lock, flags);
                VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,