diff options
Diffstat (limited to 'drivers/xen/events.c')
-rw-r--r-- | drivers/xen/events.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 97612f548a8e..321a0c8346e5 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c | |||
@@ -1299,9 +1299,6 @@ static void restore_cpu_virqs(unsigned int cpu) | |||
1299 | evtchn_to_irq[evtchn] = irq; | 1299 | evtchn_to_irq[evtchn] = irq; |
1300 | irq_info[irq] = mk_virq_info(evtchn, virq); | 1300 | irq_info[irq] = mk_virq_info(evtchn, virq); |
1301 | bind_evtchn_to_cpu(evtchn, cpu); | 1301 | bind_evtchn_to_cpu(evtchn, cpu); |
1302 | |||
1303 | /* Ready for use. */ | ||
1304 | unmask_evtchn(evtchn); | ||
1305 | } | 1302 | } |
1306 | } | 1303 | } |
1307 | 1304 | ||
@@ -1327,10 +1324,6 @@ static void restore_cpu_ipis(unsigned int cpu) | |||
1327 | evtchn_to_irq[evtchn] = irq; | 1324 | evtchn_to_irq[evtchn] = irq; |
1328 | irq_info[irq] = mk_ipi_info(evtchn, ipi); | 1325 | irq_info[irq] = mk_ipi_info(evtchn, ipi); |
1329 | bind_evtchn_to_cpu(evtchn, cpu); | 1326 | bind_evtchn_to_cpu(evtchn, cpu); |
1330 | |||
1331 | /* Ready for use. */ | ||
1332 | unmask_evtchn(evtchn); | ||
1333 | |||
1334 | } | 1327 | } |
1335 | } | 1328 | } |
1336 | 1329 | ||
@@ -1390,6 +1383,7 @@ void xen_poll_irq(int irq) | |||
1390 | void xen_irq_resume(void) | 1383 | void xen_irq_resume(void) |
1391 | { | 1384 | { |
1392 | unsigned int cpu, irq, evtchn; | 1385 | unsigned int cpu, irq, evtchn; |
1386 | struct irq_desc *desc; | ||
1393 | 1387 | ||
1394 | init_evtchn_cpu_bindings(); | 1388 | init_evtchn_cpu_bindings(); |
1395 | 1389 | ||
@@ -1408,6 +1402,23 @@ void xen_irq_resume(void) | |||
1408 | restore_cpu_virqs(cpu); | 1402 | restore_cpu_virqs(cpu); |
1409 | restore_cpu_ipis(cpu); | 1403 | restore_cpu_ipis(cpu); |
1410 | } | 1404 | } |
1405 | |||
1406 | /* | ||
1407 | * Unmask any IRQF_NO_SUSPEND IRQs which are enabled. These | ||
1408 | * are not handled by the IRQ core. | ||
1409 | */ | ||
1410 | for_each_irq_desc(irq, desc) { | ||
1411 | if (!desc->action || !(desc->action->flags & IRQF_NO_SUSPEND)) | ||
1412 | continue; | ||
1413 | if (desc->status & IRQ_DISABLED) | ||
1414 | continue; | ||
1415 | |||
1416 | evtchn = evtchn_from_irq(irq); | ||
1417 | if (evtchn == -1) | ||
1418 | continue; | ||
1419 | |||
1420 | unmask_evtchn(evtchn); | ||
1421 | } | ||
1411 | } | 1422 | } |
1412 | 1423 | ||
1413 | static struct irq_chip xen_dynamic_chip __read_mostly = { | 1424 | static struct irq_chip xen_dynamic_chip __read_mostly = { |