diff options
author | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2011-03-10 14:42:11 -0500 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2011-03-10 14:42:11 -0500 |
commit | 8448f0119a4309ef9626cf8e2dc5abb881e6dc2a (patch) | |
tree | e71e959bd5eec178c38273e3ccff30e7905b6e07 /arch/x86/pci | |
parent | 8054c3634cb3cb9d426c8ade934389213b857858 (diff) | |
parent | 3d74a539ae07a8f3c061332e426fc07b2310cf05 (diff) |
Merge branch 'stable/pcifront-fixes' into stable/irq.cleanup
* stable/pcifront-fixes:
pci/xen: When free-ing MSI-X/MSI irq->desc also use generic code.
pci/xen: Cleanup: convert int** to int[]
pci/xen: Use xen_allocate_pirq_msi instead of xen_allocate_pirq
xen-pcifront: Sanity check the MSI/MSI-X values
xen-pcifront: don't use flush_scheduled_work()
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) |