diff options
Diffstat (limited to 'arch/x86/pci')
-rw-r--r-- | arch/x86/pci/xen.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c index 2a12f3dbdd02..8634e1b49c03 100644 --- a/arch/x86/pci/xen.c +++ b/arch/x86/pci/xen.c | |||
@@ -150,21 +150,21 @@ static int xen_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) | |||
150 | return -ENOMEM; | 150 | return -ENOMEM; |
151 | 151 | ||
152 | if (type == PCI_CAP_ID_MSIX) | 152 | if (type == PCI_CAP_ID_MSIX) |
153 | ret = xen_pci_frontend_enable_msix(dev, &v, nvec); | 153 | ret = xen_pci_frontend_enable_msix(dev, v, nvec); |
154 | else | 154 | else |
155 | ret = xen_pci_frontend_enable_msi(dev, &v); | 155 | ret = xen_pci_frontend_enable_msi(dev, v); |
156 | if (ret) | 156 | if (ret) |
157 | goto error; | 157 | goto error; |
158 | i = 0; | 158 | i = 0; |
159 | list_for_each_entry(msidesc, &dev->msi_list, list) { | 159 | list_for_each_entry(msidesc, &dev->msi_list, list) { |
160 | irq = xen_allocate_pirq(v[i], 0, /* not sharable */ | 160 | xen_allocate_pirq_msi( |
161 | (type == PCI_CAP_ID_MSIX) ? | 161 | (type == PCI_CAP_ID_MSIX) ? |
162 | "pcifront-msi-x" : "pcifront-msi"); | 162 | "pcifront-msi-x" : "pcifront-msi", |
163 | &irq, &v[i], XEN_ALLOC_IRQ); | ||
163 | if (irq < 0) { | 164 | if (irq < 0) { |
164 | ret = -1; | 165 | ret = -1; |
165 | goto free; | 166 | goto free; |
166 | } | 167 | } |
167 | |||
168 | ret = set_irq_msi(irq, msidesc); | 168 | ret = set_irq_msi(irq, msidesc); |
169 | if (ret) | 169 | if (ret) |
170 | goto error_while; | 170 | goto error_while; |
@@ -193,6 +193,9 @@ static void xen_teardown_msi_irqs(struct pci_dev *dev) | |||
193 | xen_pci_frontend_disable_msix(dev); | 193 | xen_pci_frontend_disable_msix(dev); |
194 | else | 194 | else |
195 | xen_pci_frontend_disable_msi(dev); | 195 | xen_pci_frontend_disable_msi(dev); |
196 | |||
197 | /* Free the IRQ's and the msidesc using the generic code. */ | ||
198 | default_teardown_msi_irqs(dev); | ||
196 | } | 199 | } |
197 | 200 | ||
198 | static void xen_teardown_msi_irq(unsigned int irq) | 201 | static void xen_teardown_msi_irq(unsigned int irq) |