diff options
Diffstat (limited to 'drivers/xen/events.c')
-rw-r--r-- | drivers/xen/events.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 7c3705479ea1..2c8d710713f5 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c | |||
@@ -30,6 +30,7 @@ | |||
30 | 30 | ||
31 | #include <asm/ptrace.h> | 31 | #include <asm/ptrace.h> |
32 | #include <asm/irq.h> | 32 | #include <asm/irq.h> |
33 | #include <asm/idle.h> | ||
33 | #include <asm/sync_bitops.h> | 34 | #include <asm/sync_bitops.h> |
34 | #include <asm/xen/hypercall.h> | 35 | #include <asm/xen/hypercall.h> |
35 | #include <asm/xen/hypervisor.h> | 36 | #include <asm/xen/hypervisor.h> |
@@ -517,6 +518,24 @@ irqreturn_t xen_debug_interrupt(int irq, void *dev_id) | |||
517 | } | 518 | } |
518 | 519 | ||
519 | 520 | ||
521 | static void xen_do_irq(unsigned irq, struct pt_regs *regs) | ||
522 | { | ||
523 | struct pt_regs *old_regs = set_irq_regs(regs); | ||
524 | |||
525 | if (WARN_ON(irq == -1)) | ||
526 | return; | ||
527 | |||
528 | exit_idle(); | ||
529 | irq_enter(); | ||
530 | |||
531 | //printk("cpu %d handling irq %d\n", smp_processor_id(), info->irq); | ||
532 | handle_irq(irq, regs); | ||
533 | |||
534 | irq_exit(); | ||
535 | |||
536 | set_irq_regs(old_regs); | ||
537 | } | ||
538 | |||
520 | /* | 539 | /* |
521 | * Search the CPUs pending events bitmasks. For each one found, map | 540 | * Search the CPUs pending events bitmasks. For each one found, map |
522 | * the event number to an irq, and feed it into do_IRQ() for | 541 | * the event number to an irq, and feed it into do_IRQ() for |
@@ -557,8 +576,7 @@ void xen_evtchn_do_upcall(struct pt_regs *regs) | |||
557 | int port = (word_idx * BITS_PER_LONG) + bit_idx; | 576 | int port = (word_idx * BITS_PER_LONG) + bit_idx; |
558 | int irq = evtchn_to_irq[port]; | 577 | int irq = evtchn_to_irq[port]; |
559 | 578 | ||
560 | if (irq != -1) | 579 | xen_do_irq(irq, regs); |
561 | xen_do_IRQ(irq, regs); | ||
562 | } | 580 | } |
563 | } | 581 | } |
564 | 582 | ||