From f376ad7f1f80bddfb754b21811d17959c45d43a4 Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Sun, 16 Oct 2022 15:28:21 -0400 Subject: 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(-) (limited to 'kernel') 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) { -- cgit v1.2.3