cvs add spinlock.h
fix race in schedule()
This commit is contained in:
parent
4e8f237be8
commit
664324745e
4 changed files with 17 additions and 3 deletions
7
Notes
7
Notes
|
@ -126,3 +126,10 @@ in general, the table locks protect both free-ness and
|
|||
why can't i get a lock in console code?
|
||||
always triple fault
|
||||
lock code shouldn't call cprintf...
|
||||
ide_init doesn't work now?
|
||||
and IOAPIC: read from unsupported address
|
||||
when running pre-empt user test
|
||||
so maybe something wrong with clock interrupts
|
||||
no! if one cpu holds lock w/ curproc0=,
|
||||
then another cpu can take it, it looks like
|
||||
a recursive acquire()
|
||||
|
|
3
proc.c
3
proc.c
|
@ -148,7 +148,6 @@ scheduler(void)
|
|||
|
||||
if(i < NPROC){
|
||||
np->state = RUNNING;
|
||||
release(&proc_table_lock);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -159,6 +158,8 @@ scheduler(void)
|
|||
cpus[cpu()].lastproc = np;
|
||||
curproc[cpu()] = np;
|
||||
|
||||
release(&proc_table_lock);
|
||||
|
||||
// h/w sets busy bit in TSS descriptor sometimes, and faults
|
||||
// if it's set in LTR. so clear tss descriptor busy bit.
|
||||
np->gdt[SEG_TSS].sd_type = STS_T32A;
|
||||
|
|
6
spinlock.h
Normal file
6
spinlock.h
Normal file
|
@ -0,0 +1,6 @@
|
|||
struct spinlock {
|
||||
unsigned int locked;
|
||||
struct proc *p;
|
||||
int count;
|
||||
unsigned locker_pc;
|
||||
};
|
|
@ -93,8 +93,8 @@ preempt()
|
|||
main()
|
||||
{
|
||||
puts("usertests starting\n");
|
||||
pipe1();
|
||||
//preempt();
|
||||
//pipe1();
|
||||
preempt();
|
||||
|
||||
while(1)
|
||||
;
|
||||
|
|
Loading…
Reference in a new issue