Simplify the vm fault trap handling code a bit by using if-else instead of

duplicating code in the then case and then using a goto to jump around
the else case.
This commit is contained in:
jhb 2001-05-11 23:50:08 +00:00
parent bba3cec519
commit c20ad9aee2
4 changed files with 49 additions and 98 deletions

View File

@ -743,16 +743,11 @@ trap_pfault(frame, usermode, eva)
* a growable stack region, or if the stack * a growable stack region, or if the stack
* growth succeeded. * growth succeeded.
*/ */
if (!grow_stack (p, va)) { if (!grow_stack (p, va))
rv = KERN_FAILURE; rv = KERN_FAILURE;
PROC_LOCK(p); else
--p->p_lock; /* Fault in the user page: */
PROC_UNLOCK(p); rv = vm_fault(map, va, ftype,
goto nogo;
}
/* Fault in the user page: */
rv = vm_fault(map, va, ftype,
(ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY
: VM_FAULT_NORMAL); : VM_FAULT_NORMAL);
@ -864,16 +859,11 @@ trap_pfault(frame, usermode, eva)
* a growable stack region, or if the stack * a growable stack region, or if the stack
* growth succeeded. * growth succeeded.
*/ */
if (!grow_stack (p, va)) { if (!grow_stack (p, va))
rv = KERN_FAILURE; rv = KERN_FAILURE;
PROC_LOCK(p); else
--p->p_lock; /* Fault in the user page: */
PROC_UNLOCK(p); rv = vm_fault(map, va, ftype,
goto nogo;
}
/* Fault in the user page: */
rv = vm_fault(map, va, ftype,
(ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY
: VM_FAULT_NORMAL); : VM_FAULT_NORMAL);
@ -1044,17 +1034,13 @@ int trapwrite(addr)
++p->p_lock; ++p->p_lock;
PROC_UNLOCK(p); PROC_UNLOCK(p);
if (!grow_stack (p, va)) { if (!grow_stack (p, va))
PROC_LOCK(p); rv = KERN_FAILURE;
--p->p_lock; else
PROC_UNLOCK(p); /*
return (1); * fault the data page
} */
rv = vm_fault(&vm->vm_map, va, VM_PROT_WRITE, VM_FAULT_DIRTY);
/*
* fault the data page
*/
rv = vm_fault(&vm->vm_map, va, VM_PROT_WRITE, VM_FAULT_DIRTY);
PROC_LOCK(p); PROC_LOCK(p);
--p->p_lock; --p->p_lock;

View File

@ -743,16 +743,11 @@ trap_pfault(frame, usermode, eva)
* a growable stack region, or if the stack * a growable stack region, or if the stack
* growth succeeded. * growth succeeded.
*/ */
if (!grow_stack (p, va)) { if (!grow_stack (p, va))
rv = KERN_FAILURE; rv = KERN_FAILURE;
PROC_LOCK(p); else
--p->p_lock; /* Fault in the user page: */
PROC_UNLOCK(p); rv = vm_fault(map, va, ftype,
goto nogo;
}
/* Fault in the user page: */
rv = vm_fault(map, va, ftype,
(ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY
: VM_FAULT_NORMAL); : VM_FAULT_NORMAL);
@ -864,16 +859,11 @@ trap_pfault(frame, usermode, eva)
* a growable stack region, or if the stack * a growable stack region, or if the stack
* growth succeeded. * growth succeeded.
*/ */
if (!grow_stack (p, va)) { if (!grow_stack (p, va))
rv = KERN_FAILURE; rv = KERN_FAILURE;
PROC_LOCK(p); else
--p->p_lock; /* Fault in the user page: */
PROC_UNLOCK(p); rv = vm_fault(map, va, ftype,
goto nogo;
}
/* Fault in the user page: */
rv = vm_fault(map, va, ftype,
(ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY
: VM_FAULT_NORMAL); : VM_FAULT_NORMAL);
@ -1044,17 +1034,13 @@ int trapwrite(addr)
++p->p_lock; ++p->p_lock;
PROC_UNLOCK(p); PROC_UNLOCK(p);
if (!grow_stack (p, va)) { if (!grow_stack (p, va))
PROC_LOCK(p); rv = KERN_FAILURE;
--p->p_lock; else
PROC_UNLOCK(p); /*
return (1); * fault the data page
} */
rv = vm_fault(&vm->vm_map, va, VM_PROT_WRITE, VM_FAULT_DIRTY);
/*
* fault the data page
*/
rv = vm_fault(&vm->vm_map, va, VM_PROT_WRITE, VM_FAULT_DIRTY);
PROC_LOCK(p); PROC_LOCK(p);
--p->p_lock; --p->p_lock;

View File

@ -396,17 +396,11 @@ trap(int vector, int imm, struct trapframe *framep)
* a growable stack region, or if the stack * a growable stack region, or if the stack
* growth succeeded. * growth succeeded.
*/ */
if (!grow_stack (p, va)) { if (!grow_stack (p, va))
rv = KERN_FAILURE; rv = KERN_FAILURE;
PROC_LOCK(p); else
--p->p_lock; /* Fault in the user page: */
PROC_UNLOCK(p); rv = vm_fault(map, va, ftype,
goto nogo;
}
/* Fault in the user page: */
rv = vm_fault(map, va, ftype,
(ftype & VM_PROT_WRITE) (ftype & VM_PROT_WRITE)
? VM_FAULT_DIRTY ? VM_FAULT_DIRTY
: VM_FAULT_NORMAL); : VM_FAULT_NORMAL);
@ -422,7 +416,6 @@ trap(int vector, int imm, struct trapframe *framep)
rv = vm_fault(map, va, ftype, VM_FAULT_NORMAL); rv = vm_fault(map, va, ftype, VM_FAULT_NORMAL);
} }
nogo:;
/* /*
* If this was a stack access we keep track of the * If this was a stack access we keep track of the
* maximum accessed stack size. Also, if vm_fault * maximum accessed stack size. Also, if vm_fault

View File

@ -743,16 +743,11 @@ trap_pfault(frame, usermode, eva)
* a growable stack region, or if the stack * a growable stack region, or if the stack
* growth succeeded. * growth succeeded.
*/ */
if (!grow_stack (p, va)) { if (!grow_stack (p, va))
rv = KERN_FAILURE; rv = KERN_FAILURE;
PROC_LOCK(p); else
--p->p_lock; /* Fault in the user page: */
PROC_UNLOCK(p); rv = vm_fault(map, va, ftype,
goto nogo;
}
/* Fault in the user page: */
rv = vm_fault(map, va, ftype,
(ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY
: VM_FAULT_NORMAL); : VM_FAULT_NORMAL);
@ -864,16 +859,11 @@ trap_pfault(frame, usermode, eva)
* a growable stack region, or if the stack * a growable stack region, or if the stack
* growth succeeded. * growth succeeded.
*/ */
if (!grow_stack (p, va)) { if (!grow_stack (p, va))
rv = KERN_FAILURE; rv = KERN_FAILURE;
PROC_LOCK(p); else
--p->p_lock; /* Fault in the user page: */
PROC_UNLOCK(p); rv = vm_fault(map, va, ftype,
goto nogo;
}
/* Fault in the user page: */
rv = vm_fault(map, va, ftype,
(ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY
: VM_FAULT_NORMAL); : VM_FAULT_NORMAL);
@ -1044,17 +1034,13 @@ int trapwrite(addr)
++p->p_lock; ++p->p_lock;
PROC_UNLOCK(p); PROC_UNLOCK(p);
if (!grow_stack (p, va)) { if (!grow_stack (p, va))
PROC_LOCK(p); rv = KERN_FAILURE;
--p->p_lock; else
PROC_UNLOCK(p); /*
return (1); * fault the data page
} */
rv = vm_fault(&vm->vm_map, va, VM_PROT_WRITE, VM_FAULT_DIRTY);
/*
* fault the data page
*/
rv = vm_fault(&vm->vm_map, va, VM_PROT_WRITE, VM_FAULT_DIRTY);
PROC_LOCK(p); PROC_LOCK(p);
--p->p_lock; --p->p_lock;