aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2010-09-22 18:28:52 -0400
committerJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2010-10-22 15:57:34 -0400
commita52521f149c42b35a28423ee30be9a7afa51dfbf (patch)
treeefbdbd6c297858df7a375b3deec110c432e0912a
parentb0097adeec27e30223c989561ab0f7aa60d1fe93 (diff)
xen: set up IRQ before binding virq to evtchn
Make sure the irq is set up before binding a virq event channel to it. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
-rw-r--r--drivers/xen/events.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index b4e73011a80e..a3362479cfcf 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -436,6 +436,11 @@ static int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
436 irq = per_cpu(virq_to_irq, cpu)[virq]; 436 irq = per_cpu(virq_to_irq, cpu)[virq];
437 437
438 if (irq == -1) { 438 if (irq == -1) {
439 irq = find_unbound_irq();
440
441 set_irq_chip_and_handler_name(irq, &xen_percpu_chip,
442 handle_percpu_irq, "virq");
443
439 bind_virq.virq = virq; 444 bind_virq.virq = virq;
440 bind_virq.vcpu = cpu; 445 bind_virq.vcpu = cpu;
441 if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq, 446 if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq,
@@ -443,11 +448,6 @@ static int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
443 BUG(); 448 BUG();
444 evtchn = bind_virq.port; 449 evtchn = bind_virq.port;
445 450
446 irq = find_unbound_irq();
447
448 set_irq_chip_and_handler_name(irq, &xen_percpu_chip,
449 handle_percpu_irq, "virq");
450
451 evtchn_to_irq[evtchn] = irq; 451 evtchn_to_irq[evtchn] = irq;
452 irq_info[irq] = mk_virq_info(evtchn, virq); 452 irq_info[irq] = mk_virq_info(evtchn, virq);
453 453