MSI: Consolidate MSI-X irq freeing code

For the MSI-X case we do exactly the same logic in pci_disable_msix() and
msi_remove_pci_irq_vectors(), so consolidate them.

msi_remove_pci_irq_vectors() wasn't setting dev->first_msi_irq to 0, but
I think it should have been, so the consolidated version does.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Acked-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index 91fed54..4f326f3 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -674,10 +674,26 @@
 	return status;
 }
 
-void pci_disable_msix(struct pci_dev* dev)
+static void msix_free_all_irqs(struct pci_dev *dev)
 {
 	int irq, head, tail = 0;
 
+	irq = head = dev->first_msi_irq;
+	while (head != tail) {
+		tail = get_irq_msi(irq)->link.tail;
+
+		BUG_ON(irq_has_action(irq));
+
+		if (irq != head)
+			msi_free_irq(dev, irq);
+		irq = tail;
+	}
+	msi_free_irq(dev, irq);
+	dev->first_msi_irq = 0;
+}
+
+void pci_disable_msix(struct pci_dev* dev)
+{
 	if (!pci_msi_enable)
 		return;
 	if (!dev)
@@ -690,18 +706,7 @@
 	pci_intx(dev, 1);		/* enable intx */
 	dev->msix_enabled = 0;
 
-	irq = head = dev->first_msi_irq;
-	while (head != tail) {
-		tail = get_irq_msi(irq)->link.tail;
-
-		BUG_ON(irq_has_action(irq));
-
-		if (irq != head)	/* Release MSI-X irq */
-			msi_free_irq(dev, irq);
-		irq = tail;
-	}
-	msi_free_irq(dev, irq);
-	dev->first_msi_irq = 0;
+	msix_free_all_irqs(dev);
 }
 
 /**
@@ -722,23 +727,9 @@
 		BUG_ON(irq_has_action(dev->first_msi_irq));
 		msi_free_irq(dev, dev->first_msi_irq);
 	}
-	if (dev->msix_enabled) {
-		int irq, head, tail = 0;
-		void __iomem *base = NULL;
 
-		irq = head = dev->first_msi_irq;
-		while (head != tail) {
-			tail = get_irq_msi(irq)->link.tail;
-			base = get_irq_msi(irq)->mask_base;
-
-			BUG_ON(irq_has_action(irq));
-
-			if (irq != head) /* Release MSI-X irq */
-				msi_free_irq(dev, irq);
-			irq = tail;
-		}
-		msi_free_irq(dev, irq);
-	}
+	if (dev->msix_enabled)
+		msix_free_all_irqs(dev);
 }
 
 void pci_no_msi(void)