@@ -1749,8 +1749,7 @@ void ixgbevf_reset(struct ixgbevf_adapter *adapter)
static int ixgbevf_acquire_msix_vectors(struct ixgbevf_adapter *adapter,
int vectors)
{
- int err = 0;
- int vector_threshold;
+ int err, vector_threshold;
/* We'll want at least 2 (vector_threshold):
* 1) TxQ[0] + RxQ[0] handler
@@ -1763,18 +1762,15 @@ static int ixgbevf_acquire_msix_vectors(struct ixgbevf_adapter *adapter,
* Right now, we simply care about how many we'll get; we'll
* set them up later while requesting irq's.
*/
- while (vectors >= vector_threshold) {
- err = pci_enable_msix(adapter->pdev, adapter->msix_entries,
- vectors);
- if (!err || err < 0) /* Success or a nasty failure. */
- break;
- else /* err == number of vectors we should try again with */
- vectors = err;
- }
+ err = pci_msix_table_size(adapter->pdev);
+ if (err < 0)
+ return err;
+ vectors = min(vectors, err);
if (vectors < vector_threshold)
- err = -ENOSPC;
+ return -ENOSPC;
+ err = pci_enable_msix(adapter->pdev, adapter->msix_entries, vectors);
if (err) {
dev_err(&adapter->pdev->dev,
"Unable to allocate MSI-X interrupts\n");
As result of recent re-design of the MSI/MSI-X interrupts enabling pattern this driver has to be updated to use the new technique to obtain a optimal number of MSI/MSI-X interrupts required. Signed-off-by: Alexander Gordeev <agordeev@redhat.com> --- drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 18 +++++++----------- 1 files changed, 7 insertions(+), 11 deletions(-)