From: Jeremy Fitzhardinge Date: Mon, 17 Mar 2008 23:37:19 +0000 (-0700) Subject: xen: make sure retriggered events are set pending X-Git-Tag: v2.6.26-rc1~1065^2~26 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=ee8fa1c67f0b873a324960f0ca9fa1d7e49aa86b;p=karo-tx-linux.git xen: make sure retriggered events are set pending retrigger_dynirq() was incomplete, and didn't properly set the event to be pending again. It doesn't seem to actually get used. Signed-off-by: Jeremy Fitzhardinge Signed-off-by: Ingo Molnar Signed-off-by: Thomas Gleixner --- diff --git a/arch/x86/xen/events.c b/arch/x86/xen/events.c index 0140981e93c4..f73b53bd65b7 100644 --- a/arch/x86/xen/events.c +++ b/arch/x86/xen/events.c @@ -601,10 +601,16 @@ static void ack_dynirq(unsigned int irq) static int retrigger_dynirq(unsigned int irq) { int evtchn = evtchn_from_irq(irq); + struct shared_info *sh = HYPERVISOR_shared_info; int ret = 0; if (VALID_EVTCHN(evtchn)) { - set_evtchn(evtchn); + int masked; + + masked = sync_test_and_set_bit(evtchn, sh->evtchn_mask); + sync_set_bit(evtchn, sh->evtchn_pending); + if (!masked) + unmask_evtchn(evtchn); ret = 1; }