From: Jeremy Fitzhardinge Date: Sat, 21 Aug 2010 02:10:01 +0000 (-0700) Subject: xen: handle events as edge-triggered X-Git-Tag: v2.6.36-rc3~26^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dffe2e1e1a1ddb566a76266136c312801c66dcf7;p=platform%2Fupstream%2Fkernel-adaptation-pc.git xen: handle events as edge-triggered Xen events are logically edge triggered, as Xen only calls the event upcall when an event is newly set, but not continuously as it remains set. As a result, use handle_edge_irq rather than handle_level_irq. This has the important side-effect of fixing a long-standing bug of events getting lost if: - an event's interrupt handler is running - the event is migrated to a different vcpu - the event is re-triggered The most noticable symptom of these lost events is occasional lockups of blkfront. Many thanks to Tom Kopec and Daniel Stodden in tracking this down. Signed-off-by: Jeremy Fitzhardinge Cc: Tom Kopec Cc: Daniel Stodden Cc: Stable Kernel --- diff --git a/drivers/xen/events.c b/drivers/xen/events.c index 0923ccb..13365ba 100644 --- a/drivers/xen/events.c +++ b/drivers/xen/events.c @@ -378,7 +378,7 @@ int bind_evtchn_to_irq(unsigned int evtchn) irq = find_unbound_irq(); set_irq_chip_and_handler_name(irq, &xen_dynamic_chip, - handle_level_irq, "event"); + handle_edge_irq, "event"); evtchn_to_irq[evtchn] = irq; irq_info[irq] = mk_evtchn_info(evtchn);