diff options
-rw-r--r-- | arch/x86/pci/xen.c | 10 | ||||
-rw-r--r-- | drivers/xen/events.c | 7 |
2 files changed, 11 insertions, 6 deletions
diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c index 1017c7bee388..11a9301d52d4 100644 --- a/arch/x86/pci/xen.c +++ b/arch/x86/pci/xen.c | |||
@@ -175,8 +175,10 @@ static int xen_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) | |||
175 | "pcifront-msi-x" : | 175 | "pcifront-msi-x" : |
176 | "pcifront-msi", | 176 | "pcifront-msi", |
177 | DOMID_SELF); | 177 | DOMID_SELF); |
178 | if (irq < 0) | 178 | if (irq < 0) { |
179 | ret = irq; | ||
179 | goto free; | 180 | goto free; |
181 | } | ||
180 | i++; | 182 | i++; |
181 | } | 183 | } |
182 | kfree(v); | 184 | kfree(v); |
@@ -221,8 +223,10 @@ static int xen_hvm_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) | |||
221 | if (msg.data != XEN_PIRQ_MSI_DATA || | 223 | if (msg.data != XEN_PIRQ_MSI_DATA || |
222 | xen_irq_from_pirq(pirq) < 0) { | 224 | xen_irq_from_pirq(pirq) < 0) { |
223 | pirq = xen_allocate_pirq_msi(dev, msidesc); | 225 | pirq = xen_allocate_pirq_msi(dev, msidesc); |
224 | if (pirq < 0) | 226 | if (pirq < 0) { |
227 | irq = -ENODEV; | ||
225 | goto error; | 228 | goto error; |
229 | } | ||
226 | xen_msi_compose_msg(dev, pirq, &msg); | 230 | xen_msi_compose_msg(dev, pirq, &msg); |
227 | __write_msi_msg(msidesc, &msg); | 231 | __write_msi_msg(msidesc, &msg); |
228 | dev_dbg(&dev->dev, "xen: msi bound to pirq=%d\n", pirq); | 232 | dev_dbg(&dev->dev, "xen: msi bound to pirq=%d\n", pirq); |
@@ -244,7 +248,7 @@ static int xen_hvm_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) | |||
244 | error: | 248 | error: |
245 | dev_err(&dev->dev, | 249 | dev_err(&dev->dev, |
246 | "Xen PCI frontend has not registered MSI/MSI-X support!\n"); | 250 | "Xen PCI frontend has not registered MSI/MSI-X support!\n"); |
247 | return -ENODEV; | 251 | return irq; |
248 | } | 252 | } |
249 | 253 | ||
250 | #ifdef CONFIG_XEN_DOM0 | 254 | #ifdef CONFIG_XEN_DOM0 |
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 503614f2c122..212a5c871bf4 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c | |||
@@ -432,7 +432,8 @@ static int __must_check xen_allocate_irq_dynamic(void) | |||
432 | 432 | ||
433 | irq = irq_alloc_desc_from(first, -1); | 433 | irq = irq_alloc_desc_from(first, -1); |
434 | 434 | ||
435 | xen_irq_init(irq); | 435 | if (irq >= 0) |
436 | xen_irq_init(irq); | ||
436 | 437 | ||
437 | return irq; | 438 | return irq; |
438 | } | 439 | } |
@@ -713,7 +714,7 @@ int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc, | |||
713 | mutex_lock(&irq_mapping_update_lock); | 714 | mutex_lock(&irq_mapping_update_lock); |
714 | 715 | ||
715 | irq = xen_allocate_irq_dynamic(); | 716 | irq = xen_allocate_irq_dynamic(); |
716 | if (irq == -1) | 717 | if (irq < 0) |
717 | goto out; | 718 | goto out; |
718 | 719 | ||
719 | irq_set_chip_and_handler_name(irq, &xen_pirq_chip, handle_edge_irq, | 720 | irq_set_chip_and_handler_name(irq, &xen_pirq_chip, handle_edge_irq, |
@@ -729,7 +730,7 @@ out: | |||
729 | error_irq: | 730 | error_irq: |
730 | mutex_unlock(&irq_mapping_update_lock); | 731 | mutex_unlock(&irq_mapping_update_lock); |
731 | xen_free_irq(irq); | 732 | xen_free_irq(irq); |
732 | return -1; | 733 | return ret; |
733 | } | 734 | } |
734 | #endif | 735 | #endif |
735 | 736 | ||