OSDN Git Service

bnx2: Free IRQ before freeing status block memory
[android-x86/kernel.git] / drivers / net / bnx2.c
index 6fa7984..44aed3b 100644 (file)
@@ -6096,7 +6096,7 @@ bnx2_request_irq(struct bnx2 *bp)
 }
 
 static void
-bnx2_free_irq(struct bnx2 *bp)
+__bnx2_free_irq(struct bnx2 *bp)
 {
        struct bnx2_irq *irq;
        int i;
@@ -6107,6 +6107,13 @@ bnx2_free_irq(struct bnx2 *bp)
                        free_irq(irq->vector, &bp->bnx2_napi[i]);
                irq->requested = 0;
        }
+}
+
+static void
+bnx2_free_irq(struct bnx2 *bp)
+{
+
+       __bnx2_free_irq(bp);
        if (bp->flags & BNX2_FLAG_USING_MSI)
                pci_disable_msi(bp->pdev);
        else if (bp->flags & BNX2_FLAG_USING_MSIX)
@@ -7092,6 +7099,7 @@ bnx2_change_ring_size(struct bnx2 *bp, u32 rx, u32 tx)
 
                bnx2_netif_stop(bp, true);
                bnx2_reset_chip(bp, BNX2_DRV_MSG_CODE_RESET);
+               __bnx2_free_irq(bp);
                bnx2_free_skbs(bp);
                bnx2_free_mem(bp);
        }
@@ -7104,6 +7112,9 @@ bnx2_change_ring_size(struct bnx2 *bp, u32 rx, u32 tx)
 
                rc = bnx2_alloc_mem(bp);
                if (!rc)
+                       rc = bnx2_request_irq(bp);
+
+               if (!rc)
                        rc = bnx2_init_nic(bp, 0);
 
                if (rc) {