forked from Minki/linux
vmxnet3: fix minimum vectors alloc issue
'Commit39f9895a00
("vmxnet3: add support for 32 Tx/Rx queues")' added support for 32Tx/Rx queues. Within that patch, value of VMXNET3_LINUX_MIN_MSIX_VECT was updated. However, there is a case (numvcpus = 2) which actually requires 3 intrs which matches VMXNET3_LINUX_MIN_MSIX_VECT which then is treated as failure by stack to allocate more vectors. This patch fixes this issue. Fixes:39f9895a00
("vmxnet3: add support for 32 Tx/Rx queues") Signed-off-by: Ronak Doshi <doshir@vmware.com> Acked-by: Guolin Yang <gyang@vmware.com> Link: https://lore.kernel.org/r/20211207081737.14000-1-doshir@vmware.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
e195e9b5de
commit
f71ef02f1a
@ -3261,7 +3261,7 @@ vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
|
||||
|
||||
#ifdef CONFIG_PCI_MSI
|
||||
if (adapter->intr.type == VMXNET3_IT_MSIX) {
|
||||
int i, nvec;
|
||||
int i, nvec, nvec_allocated;
|
||||
|
||||
nvec = adapter->share_intr == VMXNET3_INTR_TXSHARE ?
|
||||
1 : adapter->num_tx_queues;
|
||||
@ -3274,14 +3274,15 @@ vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
|
||||
for (i = 0; i < nvec; i++)
|
||||
adapter->intr.msix_entries[i].entry = i;
|
||||
|
||||
nvec = vmxnet3_acquire_msix_vectors(adapter, nvec);
|
||||
if (nvec < 0)
|
||||
nvec_allocated = vmxnet3_acquire_msix_vectors(adapter, nvec);
|
||||
if (nvec_allocated < 0)
|
||||
goto msix_err;
|
||||
|
||||
/* If we cannot allocate one MSIx vector per queue
|
||||
* then limit the number of rx queues to 1
|
||||
*/
|
||||
if (nvec == VMXNET3_LINUX_MIN_MSIX_VECT) {
|
||||
if (nvec_allocated == VMXNET3_LINUX_MIN_MSIX_VECT &&
|
||||
nvec != VMXNET3_LINUX_MIN_MSIX_VECT) {
|
||||
if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE
|
||||
|| adapter->num_rx_queues != 1) {
|
||||
adapter->share_intr = VMXNET3_INTR_TXSHARE;
|
||||
@ -3291,14 +3292,14 @@ vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
|
||||
}
|
||||
}
|
||||
|
||||
adapter->intr.num_intrs = nvec;
|
||||
adapter->intr.num_intrs = nvec_allocated;
|
||||
return;
|
||||
|
||||
msix_err:
|
||||
/* If we cannot allocate MSIx vectors use only one rx queue */
|
||||
dev_info(&adapter->pdev->dev,
|
||||
"Failed to enable MSI-X, error %d. "
|
||||
"Limiting #rx queues to 1, try MSI.\n", nvec);
|
||||
"Limiting #rx queues to 1, try MSI.\n", nvec_allocated);
|
||||
|
||||
adapter->intr.type = VMXNET3_IT_MSI;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user