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 <jeremy.fitzhardinge@citrix.com> Cc: Tom Kopec <tek@acm.org> Cc: Daniel Stodden <daniel.stodden@citrix.com> Cc: Stable Kernel <stable@kernel.org>
This commit is contained in:
parent
aaca49642b
commit
dffe2e1e1a
1 changed files with 1 additions and 1 deletions
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue