aboutsummaryrefslogtreecommitdiffstats
path: root/virt/kvm
diff options
context:
space:
mode:
authorMarcelo Tosatti <mtosatti@redhat.com>2008-09-08 14:23:48 -0400
committerAvi Kivity <avi@qumranet.com>2008-10-15 04:15:26 -0400
commitd76901750ab9f71091d33ef3d2b5909d8a9a4ad4 (patch)
treee4a7ac912c70a05e4c8ee4e7294d9add48383fc2 /virt/kvm
parenta6a3034cb979b1fa3948d8e1e91b2387fc66b89b (diff)
KVM: x86: do not execute halted vcpus
Offline or uninitialized vcpu's can be executed if requested to perform userspace work. Follow Avi's suggestion to handle halted vcpu's in the main loop, simplifying kvm_emulate_halt(). Introduce a new vcpu->requests bit to indicate events that promote state from halted to running. Also standardize vcpu wake sites. Signed-off-by: Marcelo Tosatti <mtosatti <at> redhat.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'virt/kvm')
-rw-r--r--virt/kvm/kvm_main.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index de3b029f6adf..63e661be040a 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -980,12 +980,12 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
980 for (;;) { 980 for (;;) {
981 prepare_to_wait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE); 981 prepare_to_wait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE);
982 982
983 if (kvm_cpu_has_interrupt(vcpu)) 983 if (kvm_cpu_has_interrupt(vcpu) ||
984 break; 984 kvm_cpu_has_pending_timer(vcpu) ||
985 if (kvm_cpu_has_pending_timer(vcpu)) 985 kvm_arch_vcpu_runnable(vcpu)) {
986 break; 986 set_bit(KVM_REQ_UNHALT, &vcpu->requests);
987 if (kvm_arch_vcpu_runnable(vcpu))
988 break; 987 break;
988 }
989 if (signal_pending(current)) 989 if (signal_pending(current))
990 break; 990 break;
991 991