summaryrefslogtreecommitdiffstats
path: root/arch/x86/xen/time.c
diff options
context:
space:
mode:
authorMarcelo Tosatti <mtosatti@redhat.com>2008-07-26 22:01:01 +0200
committerAvi Kivity <avi@qumranet.com>2008-10-15 10:15:17 +0200
commit3cf57fed216e2c1b6fdfeccb792650bab72a350a (patch)
tree5a557f5870f5fccfbdee3bd61cab5a15e6cdc012 /arch/x86/xen/time.c
parentKVM: irq ack notification (diff)
downloadlinux-3cf57fed216e2c1b6fdfeccb792650bab72a350a.tar.xz
linux-3cf57fed216e2c1b6fdfeccb792650bab72a350a.zip
KVM: PIT: fix injection logic and count
The PIT injection logic is problematic under the following cases: 1) If there is a higher priority vector to be delivered by the time kvm_pit_timer_intr_post is invoked ps->inject_pending won't be set. This opens the possibility for missing many PIT event injections (say if guest executes hlt at this point). 2) ps->inject_pending is racy with more than two vcpus. Since there's no locking around read/dec of pt->pending, two vcpu's can inject two interrupts for a single pt->pending count. Fix 1 by using an irq ack notifier: only reinject when the previous irq has been acked. Fix 2 with appropriate locking around manipulation of pending count and irq_ack by the injection / ack paths. Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'arch/x86/xen/time.c')
0 files changed, 0 insertions, 0 deletions