diff options
Diffstat (limited to 'arch/x86/pci/xen.c')
| -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)  		return -ENOMEM;  	if (type == PCI_CAP_ID_MSIX) -		ret = xen_pci_frontend_enable_msix(dev, &v, nvec); +		ret = xen_pci_frontend_enable_msix(dev, v, nvec);  	else -		ret = xen_pci_frontend_enable_msi(dev, &v); +		ret = xen_pci_frontend_enable_msi(dev, v);  	if (ret)  		goto error;  	i = 0;  	list_for_each_entry(msidesc, &dev->msi_list, list) { -		irq = xen_allocate_pirq(v[i], 0, /* not sharable */ +		xen_allocate_pirq_msi(  			(type == PCI_CAP_ID_MSIX) ? -			"pcifront-msi-x" : "pcifront-msi"); +			"pcifront-msi-x" : "pcifront-msi", +			&irq, &v[i], XEN_ALLOC_IRQ);  		if (irq < 0) {  			ret = -1;  			goto free;  		} -  		ret = set_irq_msi(irq, msidesc);  		if (ret)  			goto error_while; @@ -193,6 +193,9 @@ static void xen_teardown_msi_irqs(struct pci_dev *dev)  		xen_pci_frontend_disable_msix(dev);  	else  		xen_pci_frontend_disable_msi(dev); + +	/* Free the IRQ's and the msidesc using the generic code. */ +	default_teardown_msi_irqs(dev);  }  static void xen_teardown_msi_irq(unsigned int irq) | 
