diff options
Diffstat (limited to 'drivers/xen')
-rw-r--r-- | drivers/xen/events.c | 8 | ||||
-rw-r--r-- | drivers/xen/manage.c | 8 |
2 files changed, 10 insertions, 6 deletions
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index ce602dd09bc1..2f8413794d05 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c | |||
@@ -649,9 +649,13 @@ void xen_evtchn_do_upcall(struct pt_regs *regs) | |||
649 | int bit_idx = __ffs(pending_bits); | 649 | int bit_idx = __ffs(pending_bits); |
650 | int port = (word_idx * BITS_PER_LONG) + bit_idx; | 650 | int port = (word_idx * BITS_PER_LONG) + bit_idx; |
651 | int irq = evtchn_to_irq[port]; | 651 | int irq = evtchn_to_irq[port]; |
652 | struct irq_desc *desc; | ||
652 | 653 | ||
653 | if (irq != -1) | 654 | if (irq != -1) { |
654 | handle_irq(irq, regs); | 655 | desc = irq_to_desc(irq); |
656 | if (desc) | ||
657 | generic_handle_irq_desc(irq, desc); | ||
658 | } | ||
655 | } | 659 | } |
656 | } | 660 | } |
657 | 661 | ||
diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c index c4997930afc7..5d42d55e299b 100644 --- a/drivers/xen/manage.c +++ b/drivers/xen/manage.c | |||
@@ -102,15 +102,15 @@ static void do_suspend(void) | |||
102 | goto out_thaw; | 102 | goto out_thaw; |
103 | } | 103 | } |
104 | 104 | ||
105 | printk(KERN_DEBUG "suspending xenstore...\n"); | ||
106 | xs_suspend(); | ||
107 | |||
105 | err = dpm_suspend_noirq(PMSG_SUSPEND); | 108 | err = dpm_suspend_noirq(PMSG_SUSPEND); |
106 | if (err) { | 109 | if (err) { |
107 | printk(KERN_ERR "dpm_suspend_noirq failed: %d\n", err); | 110 | printk(KERN_ERR "dpm_suspend_noirq failed: %d\n", err); |
108 | goto out_resume; | 111 | goto out_resume; |
109 | } | 112 | } |
110 | 113 | ||
111 | printk(KERN_DEBUG "suspending xenstore...\n"); | ||
112 | xs_suspend(); | ||
113 | |||
114 | err = stop_machine(xen_suspend, &cancelled, cpumask_of(0)); | 114 | err = stop_machine(xen_suspend, &cancelled, cpumask_of(0)); |
115 | 115 | ||
116 | dpm_resume_noirq(PMSG_RESUME); | 116 | dpm_resume_noirq(PMSG_RESUME); |
@@ -120,13 +120,13 @@ static void do_suspend(void) | |||
120 | cancelled = 1; | 120 | cancelled = 1; |
121 | } | 121 | } |
122 | 122 | ||
123 | out_resume: | ||
123 | if (!cancelled) { | 124 | if (!cancelled) { |
124 | xen_arch_resume(); | 125 | xen_arch_resume(); |
125 | xs_resume(); | 126 | xs_resume(); |
126 | } else | 127 | } else |
127 | xs_suspend_cancel(); | 128 | xs_suspend_cancel(); |
128 | 129 | ||
129 | out_resume: | ||
130 | dpm_resume_end(PMSG_RESUME); | 130 | dpm_resume_end(PMSG_RESUME); |
131 | 131 | ||
132 | /* Make sure timer events get retriggered on all CPUs */ | 132 | /* Make sure timer events get retriggered on all CPUs */ |