Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 00ba16ab authored by Michael Ellerman's avatar Michael Ellerman Committed by Greg Kroah-Hartman
Browse files

MSI: Simplify BUG() handling in msi_remove_pci_irq_vectors() part 2



Although it might be nice to do a printk before BUG'ing, it's really not
necessary, and it complicates the code.

The behaviour has changed slightly, in that before we set a flag if the irq
had an action, and continued freeing the other irqs. But as I see it that's
all irrelevant because we end up BUG'ing anyway.

Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
Acked-by: default avatarEric W. Biederman <ebiederm@xmission.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent c31af398
Loading
Loading
Loading
Loading
+5 −11
Original line number Diff line number Diff line
@@ -723,27 +723,21 @@ void msi_remove_pci_irq_vectors(struct pci_dev* dev)
		msi_free_irq(dev, dev->first_msi_irq);
	}
	if (dev->msix_enabled) {
		int irq, head, tail = 0, warning = 0;
		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;
			if (irq_has_action(irq))
				warning = 1;
			else if (irq != head) /* Release MSI-X irq */

			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 (warning) {
			iounmap(base);
			printk(KERN_WARNING "PCI: %s: msi_remove_pci_irq_vectors() "
			       "called without free_irq() on all MSI-X irqs\n",
			       pci_name(dev));
			BUG_ON(warning > 0);
		}
	}
}