forcedeth: Use pci_enable_msix_range() instead of pci_enable_msix()
[pandora-kernel.git] / drivers / net / ethernet / nvidia / forcedeth.c
index 70cf97f..bad3c05 100644 (file)
@@ -3930,7 +3930,7 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
 {
        struct fe_priv *np = get_nvpriv(dev);
        u8 __iomem *base = get_hwbase(dev);
-       int ret = 1;
+       int ret;
        int i;
        irqreturn_t (*handler)(int foo, void *data);
 
@@ -3946,14 +3946,18 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
        if (np->msi_flags & NV_MSI_X_CAPABLE) {
                for (i = 0; i < (np->msi_flags & NV_MSI_X_VECTORS_MASK); i++)
                        np->msi_x_entry[i].entry = i;
-               ret = pci_enable_msix(np->pci_dev, np->msi_x_entry, (np->msi_flags & NV_MSI_X_VECTORS_MASK));
-               if (ret == 0) {
+               ret = pci_enable_msix_range(np->pci_dev,
+                                           np->msi_x_entry,
+                                           np->msi_flags & NV_MSI_X_VECTORS_MASK,
+                                           np->msi_flags & NV_MSI_X_VECTORS_MASK);
+               if (ret > 0) {
                        np->msi_flags |= NV_MSI_X_ENABLED;
                        if (optimization_mode == NV_OPTIMIZATION_MODE_THROUGHPUT && !intr_test) {
                                /* Request irq for rx handling */
                                sprintf(np->name_rx, "%s-rx", dev->name);
-                               if (request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector,
-                                               nv_nic_irq_rx, IRQF_SHARED, np->name_rx, dev) != 0) {
+                               ret = request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector,
+                                                 nv_nic_irq_rx, IRQF_SHARED, np->name_rx, dev);
+                               if (ret) {
                                        netdev_info(dev,
                                                    "request_irq failed for rx %d\n",
                                                    ret);
@@ -3963,8 +3967,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
                                }
                                /* Request irq for tx handling */
                                sprintf(np->name_tx, "%s-tx", dev->name);
-                               if (request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector,
-                                               nv_nic_irq_tx, IRQF_SHARED, np->name_tx, dev) != 0) {
+                               ret = request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector,
+                                                 nv_nic_irq_tx, IRQF_SHARED, np->name_tx, dev);
+                               if (ret) {
                                        netdev_info(dev,
                                                    "request_irq failed for tx %d\n",
                                                    ret);
@@ -3974,8 +3979,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
                                }
                                /* Request irq for link and timer handling */
                                sprintf(np->name_other, "%s-other", dev->name);
-                               if (request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector,
-                                               nv_nic_irq_other, IRQF_SHARED, np->name_other, dev) != 0) {
+                               ret = request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector,
+                                                 nv_nic_irq_other, IRQF_SHARED, np->name_other, dev);
+                               if (ret) {
                                        netdev_info(dev,
                                                    "request_irq failed for link %d\n",
                                                    ret);
@@ -3991,7 +3997,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
                                set_msix_vector_map(dev, NV_MSI_X_VECTOR_OTHER, NVREG_IRQ_OTHER);
                        } else {
                                /* Request irq for all interrupts */
-                               if (request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector, handler, IRQF_SHARED, dev->name, dev) != 0) {
+                               ret = request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector,
+                                                 handler, IRQF_SHARED, dev->name, dev);
+                               if (ret) {
                                        netdev_info(dev,
                                                    "request_irq failed %d\n",
                                                    ret);
@@ -4005,13 +4013,15 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
                                writel(0, base + NvRegMSIXMap1);
                        }
                        netdev_info(dev, "MSI-X enabled\n");
+                       return 0;
                }
        }
-       if (ret != 0 && np->msi_flags & NV_MSI_CAPABLE) {
+       if (np->msi_flags & NV_MSI_CAPABLE) {
                ret = pci_enable_msi(np->pci_dev);
                if (ret == 0) {
                        np->msi_flags |= NV_MSI_ENABLED;
-                       if (request_irq(np->pci_dev->irq, handler, IRQF_SHARED, dev->name, dev) != 0) {
+                       ret = request_irq(np->pci_dev->irq, handler, IRQF_SHARED, dev->name, dev);
+                       if (ret) {
                                netdev_info(dev, "request_irq failed %d\n",
                                            ret);
                                pci_disable_msi(np->pci_dev);
@@ -4025,13 +4035,12 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
                        /* enable msi vector 0 */
                        writel(NVREG_MSI_VECTOR_0_ENABLED, base + NvRegMSIIrqMask);
                        netdev_info(dev, "MSI enabled\n");
+                       return 0;
                }
        }
-       if (ret != 0) {
-               if (request_irq(np->pci_dev->irq, handler, IRQF_SHARED, dev->name, dev) != 0)
-                       goto out_err;
 
-       }
+       if (request_irq(np->pci_dev->irq, handler, IRQF_SHARED, dev->name, dev) != 0)
+               goto out_err;
 
        return 0;
 out_free_tx: