diff options
Diffstat (limited to 'drivers/xen/events.c')
-rw-r--r-- | drivers/xen/events.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 1e3b934a4cf7..46625cd38743 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c | |||
@@ -141,8 +141,12 @@ static void init_evtchn_cpu_bindings(void) | |||
141 | int i; | 141 | int i; |
142 | 142 | ||
143 | /* By default all event channels notify CPU#0. */ | 143 | /* By default all event channels notify CPU#0. */ |
144 | for_each_irq_desc(i, desc) | 144 | for_each_irq_desc(i, desc) { |
145 | if (!desc) | ||
146 | continue; | ||
147 | |||
145 | desc->affinity = cpumask_of_cpu(0); | 148 | desc->affinity = cpumask_of_cpu(0); |
149 | } | ||
146 | #endif | 150 | #endif |
147 | 151 | ||
148 | memset(cpu_evtchn, 0, sizeof(cpu_evtchn)); | 152 | memset(cpu_evtchn, 0, sizeof(cpu_evtchn)); |
@@ -229,15 +233,20 @@ static void unmask_evtchn(int port) | |||
229 | static int find_unbound_irq(void) | 233 | static int find_unbound_irq(void) |
230 | { | 234 | { |
231 | int irq; | 235 | int irq; |
236 | struct irq_desc *desc; | ||
232 | 237 | ||
233 | /* Only allocate from dynirq range */ | 238 | /* Only allocate from dynirq range */ |
234 | for_each_irq_nr(irq) | 239 | for (irq = 0; irq < nr_irqs; irq++) |
235 | if (irq_bindcount[irq] == 0) | 240 | if (irq_bindcount[irq] == 0) |
236 | break; | 241 | break; |
237 | 242 | ||
238 | if (irq == nr_irqs) | 243 | if (irq == nr_irqs) |
239 | panic("No available IRQ to bind to: increase nr_irqs!\n"); | 244 | panic("No available IRQ to bind to: increase nr_irqs!\n"); |
240 | 245 | ||
246 | desc = irq_to_desc_alloc_cpu(irq, 0); | ||
247 | if (WARN_ON(desc == NULL)) | ||
248 | return -1; | ||
249 | |||
241 | return irq; | 250 | return irq; |
242 | } | 251 | } |
243 | 252 | ||
@@ -792,7 +801,7 @@ void xen_irq_resume(void) | |||
792 | mask_evtchn(evtchn); | 801 | mask_evtchn(evtchn); |
793 | 802 | ||
794 | /* No IRQ <-> event-channel mappings. */ | 803 | /* No IRQ <-> event-channel mappings. */ |
795 | for_each_irq_nr(irq) | 804 | for (irq = 0; irq < nr_irqs; irq++) |
796 | irq_info[irq].evtchn = 0; /* zap event-channel binding */ | 805 | irq_info[irq].evtchn = 0; /* zap event-channel binding */ |
797 | 806 | ||
798 | for (evtchn = 0; evtchn < NR_EVENT_CHANNELS; evtchn++) | 807 | for (evtchn = 0; evtchn < NR_EVENT_CHANNELS; evtchn++) |
@@ -824,7 +833,7 @@ void __init xen_init_IRQ(void) | |||
824 | mask_evtchn(i); | 833 | mask_evtchn(i); |
825 | 834 | ||
826 | /* Dynamic IRQ space is currently unbound. Zero the refcnts. */ | 835 | /* Dynamic IRQ space is currently unbound. Zero the refcnts. */ |
827 | for_each_irq_nr(i) | 836 | for (i = 0; i < nr_irqs; i++) |
828 | irq_bindcount[i] = 0; | 837 | irq_bindcount[i] = 0; |
829 | 838 | ||
830 | irq_ctx_init(smp_processor_id()); | 839 | irq_ctx_init(smp_processor_id()); |