push_off() and pop_off() in myproc()

This commit is contained in:
Robert Morris 2019-06-05 14:14:57 -04:00
parent 3113643768
commit 5eb1cb4972
2 changed files with 9 additions and 4 deletions

View file

@ -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");

10
proc.c
View file

@ -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;