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 <[email protected]>
---
 drivers/net/vmxnet3/vmxnet3_drv.c |   68 ++++++++++++++++++-------------------
 1 files changed, 33 insertions(+), 35 deletions(-)

diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c 
b/drivers/net/vmxnet3/vmxnet3_drv.c
index 00dc0d0..8d3321b 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -2724,49 +2724,47 @@ vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, 
u8 *mac)
 
 #ifdef CONFIG_PCI_MSI
 
-/*
- * Enable MSIx vectors.
- * Returns :
- *     0 on successful enabling of required vectors,
- *     VMXNET3_LINUX_MIN_MSIX_VECT when only minimum number of vectors required
- *      could be enabled.
- *     number of vectors which can be enabled otherwise (this number is smaller
- *      than VMXNET3_LINUX_MIN_MSIX_VECT)
- */
-
 static int
 vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter,
                             int vectors)
 {
-       int err = -EINVAL, vector_threshold;
+       int err, vector_threshold;
+
        vector_threshold = VMXNET3_LINUX_MIN_MSIX_VECT;
+       if (vectors < vector_threshold)
+               return -EINVAL;
 
-       while (vectors >= vector_threshold) {
-               err = pci_enable_msix(adapter->pdev, adapter->intr.msix_entries,
-                                     vectors);
-               if (!err) {
-                       adapter->intr.num_intrs = vectors;
-                       return 0;
-               } else if (err < 0) {
-                       dev_err(&adapter->netdev->dev,
-                                  "Failed to enable MSI-X, error: %d\n", err);
-                       return err;
-               } else if (err < vector_threshold) {
-                       dev_info(&adapter->pdev->dev,
-                                "Number of MSI-Xs which can be allocated "
-                                "is lower than min threshold required.\n");
-                       return -ENOSPC;
-               } else {
-                       /* If fails to enable required number of MSI-x vectors
-                        * try enabling minimum number of vectors required.
-                        */
-                       dev_err(&adapter->netdev->dev,
-                               "Failed to enable %d MSI-X, trying %d 
instead\n",
-                                   vectors, vector_threshold);
-                       vectors = vector_threshold;
-               }
+       err = pci_msix_table_size(adapter->pdev);
+       if (err < 0)
+               goto err_msix;
+       if (err < vector_threshold) {
+               dev_info(&adapter->pdev->dev,
+                        "Number of MSI-X interrupts which can be allocated "
+                        "is lower than min threshold required.\n");
+               return -ENOSPC;
+       }
+       if (err < vectors) {
+               /*
+                * If fails to enable required number of MSI-x vectors
+                * try enabling minimum number of vectors required.
+                */
+               dev_err(&adapter->netdev->dev,
+                       "Failed to enable %d MSI-X, trying %d instead\n",
+                       vectors, vector_threshold);
+               vectors = vector_threshold;
        }
 
+       err = pci_enable_msix(adapter->pdev, adapter->intr.msix_entries,
+                             vectors);
+       if (err)
+               goto err_msix;
+
+       adapter->intr.num_intrs = vectors;
+       return 0;
+
+err_msix:
+       dev_err(&adapter->netdev->dev,
+               "Failed to enable MSI-X, error: %d\n", err);
        return err;
 }
 
-- 
1.7.7.6


------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60134791&iu=/4140/ostg.clktrk
_______________________________________________
E1000-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit 
http://communities.intel.com/community/wired

Reply via email to