diff options
author | J. Bruce Fields <bfields@citi.umich.edu> | 2008-07-03 16:24:06 -0400 |
---|---|---|
committer | J. Bruce Fields <bfields@citi.umich.edu> | 2008-07-03 16:24:06 -0400 |
commit | e86322f611eef95aafaf726fd3965e5b211f1985 (patch) | |
tree | 28547e26df4fc6ae671dc8cc6912a53717e4db08 /virt/kvm/kvm_main.c | |
parent | b001a1b6aa960949a24c2cdc28257dfcc9428d74 (diff) | |
parent | 8948896c9e098c6fd31a6a698a598a7cbd7fa40e (diff) |
Merge branch 'for-bfields' of git://linux-nfs.org/~tomtucker/xprt-switch-2.6 into for-2.6.27
Diffstat (limited to 'virt/kvm/kvm_main.c')
-rw-r--r-- | virt/kvm/kvm_main.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index f7ba099049ea..2d29e260da3d 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
@@ -758,25 +758,26 @@ void mark_page_dirty(struct kvm *kvm, gfn_t gfn) | |||
758 | */ | 758 | */ |
759 | void kvm_vcpu_block(struct kvm_vcpu *vcpu) | 759 | void kvm_vcpu_block(struct kvm_vcpu *vcpu) |
760 | { | 760 | { |
761 | DECLARE_WAITQUEUE(wait, current); | 761 | DEFINE_WAIT(wait); |
762 | 762 | ||
763 | add_wait_queue(&vcpu->wq, &wait); | 763 | for (;;) { |
764 | 764 | prepare_to_wait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE); | |
765 | /* | 765 | |
766 | * We will block until either an interrupt or a signal wakes us up | 766 | if (kvm_cpu_has_interrupt(vcpu)) |
767 | */ | 767 | break; |
768 | while (!kvm_cpu_has_interrupt(vcpu) | 768 | if (kvm_cpu_has_pending_timer(vcpu)) |
769 | && !kvm_cpu_has_pending_timer(vcpu) | 769 | break; |
770 | && !signal_pending(current) | 770 | if (kvm_arch_vcpu_runnable(vcpu)) |
771 | && !kvm_arch_vcpu_runnable(vcpu)) { | 771 | break; |
772 | set_current_state(TASK_INTERRUPTIBLE); | 772 | if (signal_pending(current)) |
773 | break; | ||
774 | |||
773 | vcpu_put(vcpu); | 775 | vcpu_put(vcpu); |
774 | schedule(); | 776 | schedule(); |
775 | vcpu_load(vcpu); | 777 | vcpu_load(vcpu); |
776 | } | 778 | } |
777 | 779 | ||
778 | __set_current_state(TASK_RUNNING); | 780 | finish_wait(&vcpu->wq, &wait); |
779 | remove_wait_queue(&vcpu->wq, &wait); | ||
780 | } | 781 | } |
781 | 782 | ||
782 | void kvm_resched(struct kvm_vcpu *vcpu) | 783 | void kvm_resched(struct kvm_vcpu *vcpu) |