diff options
author | Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> | 2010-08-27 20:30:24 -0400 |
---|---|---|
committer | Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> | 2010-10-22 15:57:21 -0400 |
commit | 3588fe2e3f36543664beafedd3bb6dc3ffa896c5 (patch) | |
tree | 36195936e090abf5f641f359b64e9d8e7a1cf5f2 /drivers/xen/events.c | |
parent | 1e17fc7eff56d23a835d5d33e71d813aa9eb8ecc (diff) |
xen/events: change to using fasteoi
Change event delivery to:
- mask+clear event in the upcall function
- use handle_fasteoi_irq as the handler
- unmask in the eoi function (and handle migration)
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Diffstat (limited to 'drivers/xen/events.c')
-rw-r--r-- | drivers/xen/events.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 13365ba35218..8beb2bc60f7d 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c | |||
@@ -378,7 +378,7 @@ int bind_evtchn_to_irq(unsigned int evtchn) | |||
378 | irq = find_unbound_irq(); | 378 | irq = find_unbound_irq(); |
379 | 379 | ||
380 | set_irq_chip_and_handler_name(irq, &xen_dynamic_chip, | 380 | set_irq_chip_and_handler_name(irq, &xen_dynamic_chip, |
381 | handle_edge_irq, "event"); | 381 | handle_fasteoi_irq, "event"); |
382 | 382 | ||
383 | evtchn_to_irq[evtchn] = irq; | 383 | evtchn_to_irq[evtchn] = irq; |
384 | irq_info[irq] = mk_evtchn_info(evtchn); | 384 | irq_info[irq] = mk_evtchn_info(evtchn); |
@@ -664,6 +664,9 @@ static void __xen_evtchn_do_upcall(void) | |||
664 | int irq = evtchn_to_irq[port]; | 664 | int irq = evtchn_to_irq[port]; |
665 | struct irq_desc *desc; | 665 | struct irq_desc *desc; |
666 | 666 | ||
667 | mask_evtchn(port); | ||
668 | clear_evtchn(port); | ||
669 | |||
667 | if (irq != -1) { | 670 | if (irq != -1) { |
668 | desc = irq_to_desc(irq); | 671 | desc = irq_to_desc(irq); |
669 | if (desc) | 672 | if (desc) |
@@ -801,10 +804,10 @@ static void ack_dynirq(unsigned int irq) | |||
801 | { | 804 | { |
802 | int evtchn = evtchn_from_irq(irq); | 805 | int evtchn = evtchn_from_irq(irq); |
803 | 806 | ||
804 | move_native_irq(irq); | 807 | move_masked_irq(irq); |
805 | 808 | ||
806 | if (VALID_EVTCHN(evtchn)) | 809 | if (VALID_EVTCHN(evtchn)) |
807 | clear_evtchn(evtchn); | 810 | unmask_evtchn(evtchn); |
808 | } | 811 | } |
809 | 812 | ||
810 | static int retrigger_dynirq(unsigned int irq) | 813 | static int retrigger_dynirq(unsigned int irq) |
@@ -960,7 +963,7 @@ static struct irq_chip xen_dynamic_chip __read_mostly = { | |||
960 | .mask = disable_dynirq, | 963 | .mask = disable_dynirq, |
961 | .unmask = enable_dynirq, | 964 | .unmask = enable_dynirq, |
962 | 965 | ||
963 | .ack = ack_dynirq, | 966 | .eoi = ack_dynirq, |
964 | .set_affinity = set_affinity_irq, | 967 | .set_affinity = set_affinity_irq, |
965 | .retrigger = retrigger_dynirq, | 968 | .retrigger = retrigger_dynirq, |
966 | }; | 969 | }; |