diff options
author | Marcelo Tosatti <mtosatti@redhat.com> | 2008-07-26 22:01:01 +0200 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-10-15 10:15:17 +0200 |
commit | 3cf57fed216e2c1b6fdfeccb792650bab72a350a (patch) | |
tree | 5a557f5870f5fccfbdee3bd61cab5a15e6cdc012 /arch/x86/xen/time.c | |
parent | KVM: irq ack notification (diff) | |
download | linux-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