diff options
author | Marcelo Tosatti <mtosatti@redhat.com> | 2008-09-08 14:23:48 -0400 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-10-15 04:15:26 -0400 |
commit | d76901750ab9f71091d33ef3d2b5909d8a9a4ad4 (patch) | |
tree | e4a7ac912c70a05e4c8ee4e7294d9add48383fc2 /virt/kvm | |
parent | a6a3034cb979b1fa3948d8e1e91b2387fc66b89b (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.c | 10 |
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 | ||