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:
parent
bba3cec519
commit
c20ad9aee2
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user