Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Kernel v2.6.26-rc3-git2 /virt/kvm/kvm_main.c

Filename:/virt/kvm/kvm_main.c
Lines Added:15
Lines Deleted:14
Also changed in: (Previous) 2.6.26-rc3-git1  2.6.26-rc3  2.6.26-rc2  2.6.26-rc1-git9  2.6.26-rc1-git8  2.6.26-rc1-git7 
(Following) 2.6.26-rc3-git3  2.6.26-rc3-git4  2.6.26-rc3-git5  2.6.26-rc3-git6  2.6.26-rc3-git7  2.6.26-rc3-git8 

Location
[  2.6.26-rc3-git2
  [  virt
    [  kvm
       o  kvm_main.c

Patch

diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index f7ba099..2d29e26 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)
  */
 void kvm_vcpu_block(struct kvm_vcpu *vcpu)
 {
-   DECLARE_WAITQUEUE(wait, current);
-
-   add_wait_queue(&vcpu->wq, &wait);
-
-   /*
-    * We will block until either an interrupt or a signal wakes us up
-    */
-   while (!kvm_cpu_has_interrupt(vcpu)
-          && !kvm_cpu_has_pending_timer(vcpu)
-          && !signal_pending(current)
-          && !kvm_arch_vcpu_runnable(vcpu)) {
-      set_current_state(TASK_INTERRUPTIBLE);
+   DEFINE_WAIT(wait);
+
+   for (;;) {
+      prepare_to_wait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE);
+
+      if (kvm_cpu_has_interrupt(vcpu))
+         break;
+      if (kvm_cpu_has_pending_timer(vcpu))
+         break;
+      if (kvm_arch_vcpu_runnable(vcpu))
+         break;
+      if (signal_pending(current))
+         break;
+
       vcpu_put(vcpu);
       schedule();
       vcpu_load(vcpu);
    }
 
-   __set_current_state(TASK_RUNNING);
-   remove_wait_queue(&vcpu->wq, &wait);
+   finish_wait(&vcpu->wq, &wait);
 }
 
 void kvm_resched(struct kvm_vcpu *vcpu)


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.