diff options
author | cognet <cognet@FreeBSD.org> | 2006-03-01 20:42:47 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2006-03-01 20:42:47 +0000 |
commit | 6ea36e7106157a2c91b655e92553cfcb0e5ba942 (patch) | |
tree | 4919c48f1b3acca48630cafc5255b3b520b9cb0f /sys/arm | |
parent | 15a5b0ca2d2c326c8bc1193e7bcdf44ad877ad3f (diff) | |
download | FreeBSD-src-6ea36e7106157a2c91b655e92553cfcb0e5ba942.zip FreeBSD-src-6ea36e7106157a2c91b655e92553cfcb0e5ba942.tar.gz |
Make sure we decrement p_lock before leaving prefetch_abort_handler()
Diffstat (limited to 'sys/arm')
-rw-r--r-- | sys/arm/arm/trap.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/arm/arm/trap.c b/sys/arm/arm/trap.c index 2fc7205..4819fff 100644 --- a/sys/arm/arm/trap.c +++ b/sys/arm/arm/trap.c @@ -428,15 +428,14 @@ data_abort_handler(trapframe_t *tf) error = vm_fault(map, va, ftype, (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY : VM_FAULT_NORMAL); pcb->pcb_onfault = onfault; - if (__predict_true(error == 0)) { - goto out; - } if (map != kernel_map) { PROC_LOCK(p); p->p_lock--; PROC_UNLOCK(p); } + if (__predict_true(error == 0)) + goto out; if (user == 0) { if (pcb->pcb_onfault) { tf->tf_r0 = error; @@ -930,6 +929,7 @@ syscall(struct thread *td, trapframe_t *frame, u_int32_t insn) AUDIT_SYSCALL_ENTER(code, td); error = (*callp->sy_call)(td, args); AUDIT_SYSCALL_EXIT(error, td); + KASSERT(td->td_ar == NULL, ("lol")); } switch (error) { case 0: |