aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iommu/irq_remapping.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-06-04 18:59:13 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-06-04 18:59:13 -0400
commitd09cc3659db494aca4b3bb2393c533fb4946b794 (patch)
tree158d1dd5fa5fddf1c99da677a193b8561c11274d /drivers/iommu/irq_remapping.c
parent82e627eb5e07d7993216c9e63fb5550cf6ed25d7 (diff)
parentc0ffa793994a7a69c37a96dabf38323eae1dffa6 (diff)
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip into next
Pull core irq updates from Thomas Gleixner: "The irq department delivers: - Another tree wide update to get rid of the horrible create_irq interface along with its even more horrible variants. That also gets rid of the last leftovers of the initial sparse irq hackery. arch/driver specific changes have been either acked or ignored. - A fix for the spurious interrupt detection logic with threaded interrupts. - A new ARM SoC interrupt controller - The usual pile of fixes and improvements all over the place" * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (40 commits) Documentation: brcmstb-l2: Add Broadcom STB Level-2 interrupt controller binding irqchip: brcmstb-l2: Add Broadcom Set Top Box Level-2 interrupt controller genirq: Improve documentation to match current implementation ARM: iop13xx: fix msi support with sparse IRQ genirq: Provide !SMP stub for irq_set_affinity_notifier() irqchip: armada-370-xp: Move the devicetree binding documentation irqchip: gic: Use mask field in GICC_IAR genirq: Remove dynamic_irq mess ia64: Use irq_init_desc genirq: Replace dynamic_irq_init/cleanup genirq: Remove irq_reserve_irq[s] genirq: Replace reserve_irqs in core code s390: Avoid call to irq_reserve_irqs() s390: Remove pointless arch_show_interrupts() s390: pci: Check return value of alloc_irq_desc() proper sh: intc: Remove pointless irq_reserve_irqs() invocation x86, irq: Remove pointless irq_reserve_irqs() call genirq: Make create/destroy_irq() ia64 private tile: Use SPARSE_IRQ tile: pci: Use irq_alloc/free_hwirq() ...
Diffstat (limited to 'drivers/iommu/irq_remapping.c')
-rw-r--r--drivers/iommu/irq_remapping.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c
index 228632c99adb..33c439524080 100644
--- a/drivers/iommu/irq_remapping.c
+++ b/drivers/iommu/irq_remapping.c
@@ -51,7 +51,7 @@ static void irq_remapping_disable_io_apic(void)
51 51
52static int do_setup_msi_irqs(struct pci_dev *dev, int nvec) 52static int do_setup_msi_irqs(struct pci_dev *dev, int nvec)
53{ 53{
54 int node, ret, sub_handle, nvec_pow2, index = 0; 54 int ret, sub_handle, nvec_pow2, index = 0;
55 unsigned int irq; 55 unsigned int irq;
56 struct msi_desc *msidesc; 56 struct msi_desc *msidesc;
57 57
@@ -61,8 +61,7 @@ static int do_setup_msi_irqs(struct pci_dev *dev, int nvec)
61 WARN_ON(msidesc->msi_attrib.multiple); 61 WARN_ON(msidesc->msi_attrib.multiple);
62 WARN_ON(msidesc->nvec_used); 62 WARN_ON(msidesc->nvec_used);
63 63
64 node = dev_to_node(&dev->dev); 64 irq = irq_alloc_hwirqs(nvec, dev_to_node(&dev->dev));
65 irq = __create_irqs(get_nr_irqs_gsi(), nvec, node);
66 if (irq == 0) 65 if (irq == 0)
67 return -ENOSPC; 66 return -ENOSPC;
68 67
@@ -89,7 +88,7 @@ static int do_setup_msi_irqs(struct pci_dev *dev, int nvec)
89 return 0; 88 return 0;
90 89
91error: 90error:
92 destroy_irqs(irq, nvec); 91 irq_free_hwirqs(irq, nvec);
93 92
94 /* 93 /*
95 * Restore altered MSI descriptor fields and prevent just destroyed 94 * Restore altered MSI descriptor fields and prevent just destroyed
@@ -109,12 +108,11 @@ static int do_setup_msix_irqs(struct pci_dev *dev, int nvec)
109 unsigned int irq; 108 unsigned int irq;
110 109
111 node = dev_to_node(&dev->dev); 110 node = dev_to_node(&dev->dev);
112 irq = get_nr_irqs_gsi();
113 sub_handle = 0; 111 sub_handle = 0;
114 112
115 list_for_each_entry(msidesc, &dev->msi_list, list) { 113 list_for_each_entry(msidesc, &dev->msi_list, list) {
116 114
117 irq = create_irq_nr(irq, node); 115 irq = irq_alloc_hwirq(node);
118 if (irq == 0) 116 if (irq == 0)
119 return -1; 117 return -1;
120 118
@@ -137,7 +135,7 @@ static int do_setup_msix_irqs(struct pci_dev *dev, int nvec)
137 return 0; 135 return 0;
138 136
139error: 137error:
140 destroy_irq(irq); 138 irq_free_hwirq(irq);
141 return ret; 139 return ret;
142} 140}
143 141