aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/xen/events
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/xen/events')
-rw-r--r--drivers/xen/events/events_base.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
index f4a9e3311297..dca101ab1747 100644
--- a/drivers/xen/events/events_base.c
+++ b/drivers/xen/events/events_base.c
@@ -1344,26 +1344,6 @@ static int set_affinity_irq(struct irq_data *data, const struct cpumask *dest,
1344 return rebind_irq_to_cpu(data->irq, tcpu); 1344 return rebind_irq_to_cpu(data->irq, tcpu);
1345} 1345}
1346 1346
1347static int retrigger_evtchn(int evtchn)
1348{
1349 int masked;
1350
1351 if (!VALID_EVTCHN(evtchn))
1352 return 0;
1353
1354 masked = test_and_set_mask(evtchn);
1355 set_evtchn(evtchn);
1356 if (!masked)
1357 unmask_evtchn(evtchn);
1358
1359 return 1;
1360}
1361
1362int resend_irq_on_evtchn(unsigned int irq)
1363{
1364 return retrigger_evtchn(evtchn_from_irq(irq));
1365}
1366
1367static void enable_dynirq(struct irq_data *data) 1347static void enable_dynirq(struct irq_data *data)
1368{ 1348{
1369 int evtchn = evtchn_from_irq(data->irq); 1349 int evtchn = evtchn_from_irq(data->irq);
@@ -1398,7 +1378,18 @@ static void mask_ack_dynirq(struct irq_data *data)
1398 1378
1399static int retrigger_dynirq(struct irq_data *data) 1379static int retrigger_dynirq(struct irq_data *data)
1400{ 1380{
1401 return retrigger_evtchn(evtchn_from_irq(data->irq)); 1381 unsigned int evtchn = evtchn_from_irq(data->irq);
1382 int masked;
1383
1384 if (!VALID_EVTCHN(evtchn))
1385 return 0;
1386
1387 masked = test_and_set_mask(evtchn);
1388 set_evtchn(evtchn);
1389 if (!masked)
1390 unmask_evtchn(evtchn);
1391
1392 return 1;
1402} 1393}
1403 1394
1404static void restore_pirqs(void) 1395static void restore_pirqs(void)