diff options
| -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 = { |
