diff options
| -rw-r--r-- | drivers/xen/events/events_base.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c index b4bca2d4a7e5..70fba973a107 100644 --- a/drivers/xen/events/events_base.c +++ b/drivers/xen/events/events_base.c | |||
| @@ -526,20 +526,26 @@ static unsigned int __startup_pirq(unsigned int irq) | |||
| 526 | pirq_query_unmask(irq); | 526 | pirq_query_unmask(irq); |
| 527 | 527 | ||
| 528 | rc = set_evtchn_to_irq(evtchn, irq); | 528 | rc = set_evtchn_to_irq(evtchn, irq); |
| 529 | if (rc != 0) { | 529 | if (rc) |
| 530 | pr_err("irq%d: Failed to set port to irq mapping (%d)\n", | 530 | goto err; |
| 531 | irq, rc); | 531 | |
| 532 | xen_evtchn_close(evtchn); | ||
| 533 | return 0; | ||
| 534 | } | ||
| 535 | bind_evtchn_to_cpu(evtchn, 0); | 532 | bind_evtchn_to_cpu(evtchn, 0); |
| 536 | info->evtchn = evtchn; | 533 | info->evtchn = evtchn; |
| 537 | 534 | ||
| 535 | rc = xen_evtchn_port_setup(info); | ||
| 536 | if (rc) | ||
| 537 | goto err; | ||
| 538 | |||
| 538 | out: | 539 | out: |
| 539 | unmask_evtchn(evtchn); | 540 | unmask_evtchn(evtchn); |
| 540 | eoi_pirq(irq_get_irq_data(irq)); | 541 | eoi_pirq(irq_get_irq_data(irq)); |
| 541 | 542 | ||
| 542 | return 0; | 543 | return 0; |
| 544 | |||
| 545 | err: | ||
| 546 | pr_err("irq%d: Failed to set port to irq mapping (%d)\n", irq, rc); | ||
| 547 | xen_evtchn_close(evtchn); | ||
| 548 | return 0; | ||
| 543 | } | 549 | } |
| 544 | 550 | ||
| 545 | static unsigned int startup_pirq(struct irq_data *data) | 551 | static unsigned int startup_pirq(struct irq_data *data) |
