diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2007-03-22 06:51:31 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-05-02 22:02:36 -0400 |
commit | 00ba16ab2658afe11d4fdcaf16a331292c44bee6 (patch) | |
tree | 763d31188d443026071ccce1a83918efc4bf830d /drivers/pci | |
parent | c31af3987020eeb1facf64d702dcf39e6c7382e6 (diff) |
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: Michael Ellerman <michael@ellerman.id.au>
Acked-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/msi.c | 16 |
1 files changed, 5 insertions, 11 deletions
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c index 2a119f8d0dc6..91fed543fc84 100644 --- a/drivers/pci/msi.c +++ b/drivers/pci/msi.c | |||
@@ -723,27 +723,21 @@ void msi_remove_pci_irq_vectors(struct pci_dev* dev) | |||
723 | msi_free_irq(dev, dev->first_msi_irq); | 723 | msi_free_irq(dev, dev->first_msi_irq); |
724 | } | 724 | } |
725 | if (dev->msix_enabled) { | 725 | if (dev->msix_enabled) { |
726 | int irq, head, tail = 0, warning = 0; | 726 | int irq, head, tail = 0; |
727 | void __iomem *base = NULL; | 727 | void __iomem *base = NULL; |
728 | 728 | ||
729 | irq = head = dev->first_msi_irq; | 729 | irq = head = dev->first_msi_irq; |
730 | while (head != tail) { | 730 | while (head != tail) { |
731 | tail = get_irq_msi(irq)->link.tail; | 731 | tail = get_irq_msi(irq)->link.tail; |
732 | base = get_irq_msi(irq)->mask_base; | 732 | base = get_irq_msi(irq)->mask_base; |
733 | if (irq_has_action(irq)) | 733 | |
734 | warning = 1; | 734 | BUG_ON(irq_has_action(irq)); |
735 | else if (irq != head) /* Release MSI-X irq */ | 735 | |
736 | if (irq != head) /* Release MSI-X irq */ | ||
736 | msi_free_irq(dev, irq); | 737 | msi_free_irq(dev, irq); |
737 | irq = tail; | 738 | irq = tail; |
738 | } | 739 | } |
739 | msi_free_irq(dev, irq); | 740 | msi_free_irq(dev, irq); |
740 | if (warning) { | ||
741 | iounmap(base); | ||
742 | printk(KERN_WARNING "PCI: %s: msi_remove_pci_irq_vectors() " | ||
743 | "called without free_irq() on all MSI-X irqs\n", | ||
744 | pci_name(dev)); | ||
745 | BUG_ON(warning > 0); | ||
746 | } | ||
747 | } | 741 | } |
748 | } | 742 | } |
749 | 743 | ||