From f376ad7f1f80bddfb754b21811d17959c45d43a4 Mon Sep 17 00:00:00 2001
From: Robert Morris <rtm@csail.mit.edu>
Date: Sun, 16 Oct 2022 15:28:21 -0400
Subject: [PATCH] scheduler()'s intr_on() is in the wrong place, reflecting the
 locking scheme from long ago.

---
 kernel/proc.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/kernel/proc.c b/kernel/proc.c
index 659ca54..bc4b274 100644
--- a/kernel/proc.c
+++ b/kernel/proc.c
@@ -446,12 +446,13 @@ scheduler(void)
 {
   struct proc *p;
   struct cpu *c = mycpu();
+
+  // Interrupts are disabled at first, but they must be
+  // enabled in order for the shell to get input.
+  intr_on();
   
   c->proc = 0;
   for(;;){
-    // Avoid deadlock by ensuring that devices can interrupt.
-    intr_on();
-
     for(p = proc; p < &proc[NPROC]; p++) {
       acquire(&p->lock);
       if(p->state == RUNNABLE) {