Skip to content
Snippets Groups Projects
Commit cd12eea3 authored by rsc's avatar rsc
Browse files

make trap fit on one page

parent 1656b1b2
No related branches found
No related tags found
No related merge requests found
......@@ -9,10 +9,8 @@
// Interrupt descriptor table (shared by all CPUs).
struct gatedesc idt[256];
extern uint vectors[]; // in vectors.S: array of 256 entry pointers
void
tvinit(void)
{
......@@ -46,8 +44,7 @@ trap(struct trapframe *tf)
}
// Increment nlock to make sure interrupts stay off
// during interrupt handler. Must decrement before
// returning.
// during interrupt handler. Decrement before returning.
cpus[cpu()].nlock++;
switch(v){
......@@ -55,11 +52,9 @@ trap(struct trapframe *tf)
lapic_timerintr();
cpus[cpu()].nlock--;
if(cp){
// Force process exit if it has been killed
// and the interrupt came from user space.
// (If the kernel was executing at time of interrupt,
// don't kill the process. Let the process get back
// out to its regular system call return.)
// Force process exit if it has been killed and is in user space.
// (If it is still executing in the kernel, let it keep running
// until it gets to the regular system call return.)
if((tf->cs&3) == 3 && cp->killed)
proc_exit();
......@@ -85,14 +80,13 @@ trap(struct trapframe *tf)
default:
if(curproc[cpu()]) {
// assume process caused unexpected trap,
// for example by dividing by zero or dereferencing a bad pointer
// Assume process divided by zero or dereferenced null, etc.
cprintf("pid %d: unhandled trap %d on cpu %d eip %x -- kill proc\n",
curproc[cpu()]->pid, v, cpu(), tf->eip);
proc_exit();
}
// otherwise it's our mistake
// Otherwise it's our mistake.
cprintf("unexpected trap %d from cpu %d eip %x\n", v, cpu(), tf->eip);
panic("trap");
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment