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/ntb/ntb_hw.c |   41 +++++++++++++----------------------------
 drivers/ntb/ntb_hw.h |    2 --
 2 files changed, 13 insertions(+), 30 deletions(-)

diff --git a/drivers/ntb/ntb_hw.c b/drivers/ntb/ntb_hw.c
index eccd5e5..7776429 100644
--- a/drivers/ntb/ntb_hw.c
+++ b/drivers/ntb/ntb_hw.c
@@ -1032,23 +1032,26 @@ static int ntb_setup_msix(struct ntb_device *ndev)
        struct msix_entry *msix;
        int msix_entries;
        int rc, i;
-       u16 val;
 
-       if (!pdev->msix_cap) {
-               rc = -EIO;
+       rc = pci_msix_table_size(pdev);
+       if (rc < 0)
                goto err;
-       }
 
-       rc = pci_read_config_word(pdev, pdev->msix_cap + PCI_MSIX_FLAGS, &val);
-       if (rc)
+       /*
+        * On SNB, the link interrupt is always tied to 4th vector.  If
+        * we can't get all 4, then we can't use MSI-X.
+        */
+       if ((rc < SNB_MSIX_CNT) && (ndev->hw_type != BWD_HW)) {
+               rc = -ENOSPC;
                goto err;
-
-       msix_entries = msix_table_size(val);
-       if (msix_entries > ndev->limits.msix_cnt) {
+       }
+       if (rc > ndev->limits.msix_cnt) {
                rc = -EINVAL;
                goto err;
        }
 
+       msix_entries = rc;
+
        ndev->msix_entries = kmalloc(sizeof(struct msix_entry) * msix_entries,
                                     GFP_KERNEL);
        if (!ndev->msix_entries) {
@@ -1060,26 +1063,8 @@ static int ntb_setup_msix(struct ntb_device *ndev)
                ndev->msix_entries[i].entry = i;
 
        rc = pci_enable_msix(pdev, ndev->msix_entries, msix_entries);
-       if (rc < 0)
+       if (rc)
                goto err1;
-       if (rc > 0) {
-               /* On SNB, the link interrupt is always tied to 4th vector.  If
-                * we can't get all 4, then we can't use MSI-X.
-                */
-               if ((rc < SNB_MSIX_CNT) && (ndev->hw_type != BWD_HW)) {
-                       rc = -EIO;
-                       goto err1;
-               }
-
-               dev_warn(&pdev->dev,
-                        "Only %d MSI-X vectors.  Limiting the number of queues 
to that number.\n",
-                        rc);
-               msix_entries = rc;
-
-               rc = pci_enable_msix(pdev, ndev->msix_entries, msix_entries);
-               if (rc)
-                       goto err1;
-       }
 
        for (i = 0; i < msix_entries; i++) {
                msix = &ndev->msix_entries[i];
diff --git a/drivers/ntb/ntb_hw.h b/drivers/ntb/ntb_hw.h
index 0a31ced..50bd760 100644
--- a/drivers/ntb/ntb_hw.h
+++ b/drivers/ntb/ntb_hw.h
@@ -60,8 +60,6 @@
 #define PCI_DEVICE_ID_INTEL_NTB_SS_HSX         0x2F0F
 #define PCI_DEVICE_ID_INTEL_NTB_B2B_BWD                0x0C4E
 
-#define msix_table_size(control)       ((control & PCI_MSIX_FLAGS_QSIZE)+1)
-
 #ifndef readq
 static inline u64 readq(void __iomem *addr)
 {
-- 
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