From 5eb1cb49722cce9afee48886a8db138d5f58d0ff Mon Sep 17 00:00:00 2001 From: Robert Morris Date: Wed, 5 Jun 2019 14:14:57 -0400 Subject: push_off() and pop_off() in myproc() --- proc.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'proc.c') diff --git a/proc.c b/proc.c index 28cac26..7093566 100644 --- a/proc.c +++ b/proc.c @@ -11,7 +11,6 @@ struct { struct proc proc[NPROC]; } ptable; -// XXX riscv move somewhere else struct cpu cpus[NCPU]; struct proc *initproc; @@ -54,10 +53,10 @@ mycpu(void) { // Return the current struct proc *. struct proc* myproc(void) { - // XXX push intr off + push_off(); struct cpu *c = mycpu(); struct proc *p = c->proc; - // XXX pop intr + pop_off(); return p; } @@ -403,8 +402,13 @@ sched(void) if(!holding(&ptable.lock)) panic("sched ptable.lock"); + if(mycpu()->noff != 1) + panic("sched locks"); if(p->state == RUNNING) panic("sched running"); + if(intr_get()) + panic("sched interruptible"); + intena = mycpu()->intena; swtch(&p->context, &mycpu()->scheduler); mycpu()->intena = intena; -- cgit v1.2.3