diff options
| -rw-r--r-- | console.c | 3 | ||||
| -rw-r--r-- | proc.c | 10 | 
2 files changed, 9 insertions, 4 deletions
| @@ -17,7 +17,7 @@  static void consputc(int); -static int panicked = 0; +static volatile int panicked = 0;  static struct {    struct spinlock lock; @@ -120,6 +120,7 @@ printf(char *fmt, ...)  void  panic(char *s)  { +  cons.locking = 0;    printf("panic: ");    printf(s);    printf("\n"); @@ -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; | 
