diff --git a/kernel/proc.c b/kernel/proc.c
index 58a8a0b..4354ec5 100644
--- a/kernel/proc.c
+++ b/kernel/proc.c
@@ -454,6 +454,7 @@ scheduler(void)
     // processes are waiting.
     intr_on();
 
+    int found = 0;
     for(p = proc; p < &proc[NPROC]; p++) {
       acquire(&p->lock);
       if(p->state == RUNNABLE) {
@@ -467,9 +468,14 @@ scheduler(void)
         // Process is done running for now.
         // It should have changed its p->state before coming back.
         c->proc = 0;
+        found = 1;
       }
       release(&p->lock);
     }
+    if(found == 0) {
+      intr_on();
+      asm volatile("wfi");
+    }
   }
 }