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 | |
| 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')
| -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 | ||
