diff options
| -rw-r--r-- | drivers/xen/events/events_2l.c | 10 | ||||
| -rw-r--r-- | drivers/xen/events/events_base.c | 5 |
2 files changed, 13 insertions, 2 deletions
diff --git a/drivers/xen/events/events_2l.c b/drivers/xen/events/events_2l.c index 5db43fc100a4..7dd46312c180 100644 --- a/drivers/xen/events/events_2l.c +++ b/drivers/xen/events/events_2l.c | |||
| @@ -345,6 +345,15 @@ irqreturn_t xen_debug_interrupt(int irq, void *dev_id) | |||
| 345 | return IRQ_HANDLED; | 345 | return IRQ_HANDLED; |
| 346 | } | 346 | } |
| 347 | 347 | ||
| 348 | static void evtchn_2l_resume(void) | ||
| 349 | { | ||
| 350 | int i; | ||
| 351 | |||
| 352 | for_each_online_cpu(i) | ||
| 353 | memset(per_cpu(cpu_evtchn_mask, i), 0, sizeof(xen_ulong_t) * | ||
| 354 | EVTCHN_2L_NR_CHANNELS/BITS_PER_EVTCHN_WORD); | ||
| 355 | } | ||
| 356 | |||
| 348 | static const struct evtchn_ops evtchn_ops_2l = { | 357 | static const struct evtchn_ops evtchn_ops_2l = { |
| 349 | .max_channels = evtchn_2l_max_channels, | 358 | .max_channels = evtchn_2l_max_channels, |
| 350 | .nr_channels = evtchn_2l_max_channels, | 359 | .nr_channels = evtchn_2l_max_channels, |
| @@ -356,6 +365,7 @@ static const struct evtchn_ops evtchn_ops_2l = { | |||
| 356 | .mask = evtchn_2l_mask, | 365 | .mask = evtchn_2l_mask, |
| 357 | .unmask = evtchn_2l_unmask, | 366 | .unmask = evtchn_2l_unmask, |
| 358 | .handle_events = evtchn_2l_handle_events, | 367 | .handle_events = evtchn_2l_handle_events, |
| 368 | .resume = evtchn_2l_resume, | ||
| 359 | }; | 369 | }; |
| 360 | 370 | ||
| 361 | void __init xen_evtchn_2l_init(void) | 371 | void __init xen_evtchn_2l_init(void) |
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c index 70fba973a107..a1ec564d791c 100644 --- a/drivers/xen/events/events_base.c +++ b/drivers/xen/events/events_base.c | |||
| @@ -1279,8 +1279,9 @@ void rebind_evtchn_irq(int evtchn, int irq) | |||
| 1279 | 1279 | ||
| 1280 | mutex_unlock(&irq_mapping_update_lock); | 1280 | mutex_unlock(&irq_mapping_update_lock); |
| 1281 | 1281 | ||
| 1282 | /* new event channels are always bound to cpu 0 */ | 1282 | bind_evtchn_to_cpu(evtchn, info->cpu); |
| 1283 | irq_set_affinity(irq, cpumask_of(0)); | 1283 | /* This will be deferred until interrupt is processed */ |
| 1284 | irq_set_affinity(irq, cpumask_of(info->cpu)); | ||
| 1284 | 1285 | ||
| 1285 | /* Unmask the event channel. */ | 1286 | /* Unmask the event channel. */ |
| 1286 | enable_irq(irq); | 1287 | enable_irq(irq); |
