summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Morris <[email protected]>2019-06-05 14:14:57 -0400
committerRobert Morris <[email protected]>2019-06-05 14:14:57 -0400
commit5eb1cb49722cce9afee48886a8db138d5f58d0ff (patch)
treeee8c81e5b3fdfc75e154e23687f53fcb50158617
parent31136437684b5987ef46f4c6947940cf96de75b3 (diff)
downloadxv6-labs-5eb1cb49722cce9afee48886a8db138d5f58d0ff.tar.gz
xv6-labs-5eb1cb49722cce9afee48886a8db138d5f58d0ff.tar.bz2
xv6-labs-5eb1cb49722cce9afee48886a8db138d5f58d0ff.zip
push_off() and pop_off() in myproc()
-rw-r--r--console.c3
-rw-r--r--proc.c10
2 files changed, 9 insertions, 4 deletions
diff --git a/console.c b/console.c
index 122ccb3..ca20842 100644
--- a/console.c
+++ b/console.c
@@ -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");
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;