KVM: hlt emulation should take in-kernel APIC/PIT timers into account
Timers that fire between guest hlt and vcpu_block's add_wait_queue() are ignored, possibly resulting in hangs. Also make sure that atomic_inc and waitqueue_active tests happen in the specified order, otherwise the following race is open: CPU0 CPU1 if (waitqueue_active(wq)) add_wait_queue() if (!atomic_read(pit_timer->pending)) schedule() atomic_inc(pit_timer->pending) Signed-off-by:Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by:
Avi Kivity <avi@qumranet.com>
Showing
- arch/ia64/kvm/kvm-ia64.c 5 additions, 0 deletionsarch/ia64/kvm/kvm-ia64.c
- arch/s390/kvm/interrupt.c 5 additions, 0 deletionsarch/s390/kvm/interrupt.c
- arch/x86/kvm/i8254.c 10 additions, 0 deletionsarch/x86/kvm/i8254.c
- arch/x86/kvm/irq.c 15 additions, 0 deletionsarch/x86/kvm/irq.c
- arch/x86/kvm/irq.h 3 additions, 0 deletionsarch/x86/kvm/irq.h
- arch/x86/kvm/lapic.c 10 additions, 0 deletionsarch/x86/kvm/lapic.c
- include/linux/kvm_host.h 1 addition, 0 deletionsinclude/linux/kvm_host.h
- virt/kvm/kvm_main.c 1 addition, 0 deletionsvirt/kvm/kvm_main.c
Please register or sign in to comment