Convert next locking to sti and cli

上级 b1e77c3e
...@@ -94,7 +94,7 @@ void cv_sleepto(struct condvar *cv, struct spinlock *lk, u64 timeout) ...@@ -94,7 +94,7 @@ void cv_sleepto(struct condvar *cv, struct spinlock *lk, u64 timeout)
release(&cv->lock); release(&cv->lock);
sched(); sched();
release(&myproc()->lock); sti();
// Reacquire original lock. // Reacquire original lock.
acquire(lk); acquire(lk);
......
...@@ -37,7 +37,8 @@ idleloop(void) ...@@ -37,7 +37,8 @@ idleloop(void)
struct proc *p = schednext(); struct proc *p = schednext();
if (p) { if (p) {
acquire(&p->lock); cli();
//acquire(&p->lock);
if (get_proc_state(p) != RUNNABLE) { if (get_proc_state(p) != RUNNABLE) {
panic("Huh?"); panic("Huh?");
} else { } else {
......
...@@ -64,7 +64,8 @@ yield(void) ...@@ -64,7 +64,8 @@ yield(void)
acquire(&myproc()->lock); //DOC: yieldlock acquire(&myproc()->lock); //DOC: yieldlock
set_proc_state(myproc(), RUNNABLE); set_proc_state(myproc(), RUNNABLE);
sched(); sched();
release(&myproc()->lock); sti();
//release(&myproc()->lock);
} }
...@@ -73,7 +74,8 @@ yield(void) ...@@ -73,7 +74,8 @@ yield(void)
void void
forkret(void) forkret(void)
{ {
release(&myproc()->lock); sti();
//release(&myproc()->lock);
// Just for the first process. can't do it earlier // Just for the first process. can't do it earlier
// b/c file system code needs a process context // b/c file system code needs a process context
// in which to call cv_sleep(). // in which to call cv_sleep().
...@@ -500,7 +502,8 @@ wait(void) ...@@ -500,7 +502,8 @@ wait(void)
void void
threadhelper(void (*fn)(void *), void *arg) threadhelper(void (*fn)(void *), void *arg)
{ {
release(&myproc()->lock); sti();
//release(&myproc()->lock);
mtstart(fn, myproc()); mtstart(fn, myproc());
fn(arg); fn(arg);
exit(); exit();
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论