aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/hvm/vpt.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-03-09 13:50:45 +0000
committerKeir Fraser <keir.fraser@citrix.com>2009-03-09 13:50:45 +0000
commit4720717da59bf8d4ea2852bf7b7caa99959f554d (patch)
treedb621067e8b06dca8f576ec8c6f7fa5ff56e356d /xen/arch/x86/hvm/vpt.c
parent6874f240997b2ec2a1398a91bca529a11929b017 (diff)
downloadxen-4720717da59bf8d4ea2852bf7b7caa99959f554d.tar.gz
xen-4720717da59bf8d4ea2852bf7b7caa99959f554d.tar.bz2
xen-4720717da59bf8d4ea2852bf7b7caa99959f554d.zip
hvm/vpt: Check that an irq is not blocked before waking the vcpu
Currently, when a timer fires for a vpt interrupt, the interrupt handler calls vcpu_kick() without checking to see if the IRQ is blocked. This causes the vcpu to wake up out of a halt when it shouldn't. Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>
Diffstat (limited to 'xen/arch/x86/hvm/vpt.c')
-rw-r--r--xen/arch/x86/hvm/vpt.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c
index fe4ec99129..929d4cf57d 100644
--- a/xen/arch/x86/hvm/vpt.c
+++ b/xen/arch/x86/hvm/vpt.c
@@ -209,7 +209,8 @@ static void pt_timer_fn(void *data)
set_timer(&pt->timer, pt->scheduled);
}
- vcpu_kick(pt->vcpu);
+ if ( !pt_irq_masked(pt) )
+ vcpu_kick(pt->vcpu);
pt_unlock(pt);
}