aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/xen/events.c
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2010-08-27 20:30:24 -0400
committerJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2010-10-22 15:57:21 -0400
commit3588fe2e3f36543664beafedd3bb6dc3ffa896c5 (patch)
tree36195936e090abf5f641f359b64e9d8e7a1cf5f2 /drivers/xen/events.c
parent1e17fc7eff56d23a835d5d33e71d813aa9eb8ecc (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.c11
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
810static int retrigger_dynirq(unsigned int irq) 813static 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};