diff options
author | rsc <rsc> | 2006-07-16 01:15:28 +0000 |
---|---|---|
committer | rsc <rsc> | 2006-07-16 01:15:28 +0000 |
commit | 65bd8e139a8368e987455a10ec59dd7b079b3af1 (patch) | |
tree | 8ce996135fadab4abde8acf5a6ed4eb69d463c60 /trap.c | |
parent | 40a2a08319511fd157d2d77eefbda52423cc81ec (diff) | |
download | xv6-labs-65bd8e139a8368e987455a10ec59dd7b079b3af1.tar.gz xv6-labs-65bd8e139a8368e987455a10ec59dd7b079b3af1.tar.bz2 xv6-labs-65bd8e139a8368e987455a10ec59dd7b079b3af1.zip |
New scheduler.
Removed cli and sti stack in favor of tracking
number of locks held on each CPU and explicit
conditionals in spinlock.c.
Diffstat (limited to 'trap.c')
-rw-r--r-- | trap.c | 11 |
1 files changed, 2 insertions, 9 deletions
@@ -36,11 +36,6 @@ trap(struct Trapframe *tf) { int v = tf->tf_trapno; - if(cpus[cpu()].clis){ - cprintf("cpu %d v %d eip %x\n", cpu(), v, tf->tf_eip); - panic("interrupt while interrupts are off"); - } - if(v == T_SYSCALL){ struct proc *cp = curproc[cpu()]; int num = cp->tf->tf_regs.reg_eax; @@ -56,12 +51,10 @@ trap(struct Trapframe *tf) panic("trap ret but not RUNNING"); if(tf != cp->tf) panic("trap ret wrong tf"); - if(cp->locks){ + if(cpus[cpu()].nlock){ cprintf("num=%d\n", num); panic("syscall returning locks held"); } - if(cpus[cpu()].clis) - panic("syscall returning but clis != 0"); if((read_eflags() & FL_IF) == 0) panic("syscall returning but FL_IF clear"); if(read_esp() < (unsigned)cp->kstack || @@ -75,7 +68,7 @@ trap(struct Trapframe *tf) if(v == (IRQ_OFFSET + IRQ_TIMER)){ struct proc *cp = curproc[cpu()]; lapic_timerintr(); - if(cp && cp->locks) + if(cpus[cpu()].nlock) panic("timer interrupt while holding a lock"); if(cp){ #if 1 |