diff options
author | Robert Morris <rtm@csail.mit.edu> | 2022-10-17 04:07:24 -0400 |
---|---|---|
committer | Robert Morris <rtm@csail.mit.edu> | 2022-10-17 04:07:24 -0400 |
commit | 4a88273db5df00c5d3397ad5bcef50eb68f4bef8 (patch) | |
tree | c5489f8ed0627fa26f56a5cbd7c3df175b034350 | |
parent | f376ad7f1f80bddfb754b21811d17959c45d43a4 (diff) | |
download | xv6-labs-4a88273db5df00c5d3397ad5bcef50eb68f4bef8.tar.gz xv6-labs-4a88273db5df00c5d3397ad5bcef50eb68f4bef8.tar.bz2 xv6-labs-4a88273db5df00c5d3397ad5bcef50eb68f4bef8.zip |
oops. scheduler() inherits the interrupt status of the
most recent process to run, so it must explicitly
turn them on again. It would be better if cpu->intena
were really thread->intena.
-rw-r--r-- | kernel/proc.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/kernel/proc.c b/kernel/proc.c index bc4b274..809d112 100644 --- a/kernel/proc.c +++ b/kernel/proc.c @@ -447,12 +447,12 @@ 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(;;){ + // The most recent process to run may have had interrupts + // turned off; turn them on to avoid deadlock. + intr_on(); + for(p = proc; p < &proc[NPROC]; p++) { acquire(&p->lock); if(p->state == RUNNABLE) { |