diff options
author | benno <benno@FreeBSD.org> | 2002-05-12 06:06:24 +0000 |
---|---|---|
committer | benno <benno@FreeBSD.org> | 2002-05-12 06:06:24 +0000 |
commit | f9668ab4854800aead9183375e4d4725c1dcc2b6 (patch) | |
tree | 3e04de688dc717e30eaec2e406c6b83d41c58227 /sys/powerpc | |
parent | 49d0eba5f2e4c8bc62afa196db9dc683dd92018e (diff) | |
download | FreeBSD-src-f9668ab4854800aead9183375e4d4725c1dcc2b6.zip FreeBSD-src-f9668ab4854800aead9183375e4d4725c1dcc2b6.tar.gz |
Do the correct locking on processes for DSI and ISI traps.
Copied from: sparc64
Diffstat (limited to 'sys/powerpc')
-rw-r--r-- | sys/powerpc/aim/trap.c | 10 | ||||
-rw-r--r-- | sys/powerpc/powerpc/trap.c | 10 |
2 files changed, 20 insertions, 0 deletions
diff --git a/sys/powerpc/aim/trap.c b/sys/powerpc/aim/trap.c index 4878a2c..1aa2272 100644 --- a/sys/powerpc/aim/trap.c +++ b/sys/powerpc/aim/trap.c @@ -190,6 +190,8 @@ trap(frame) } case EXC_DSI|EXC_USER: PROC_LOCK(p); + ++p->p_lock; + PROC_UNLOCK(p); #if 0 curcpu()->ci_ev_udsi.ev_count++; #endif @@ -216,6 +218,8 @@ trap(frame) } else { trapsignal(p, SIGSEGV, EXC_DSI); } + PROC_LOCK(p); + --p->p_lock; PROC_UNLOCK(p); break; case EXC_ISI: @@ -224,6 +228,8 @@ trap(frame) goto brain_damage2; case EXC_ISI|EXC_USER: PROC_LOCK(p); + ++p->p_lock; + PROC_UNLOCK(p); #if 0 curcpu()->ci_ev_isi.ev_count++; #endif @@ -231,6 +237,8 @@ trap(frame) rv = vm_fault(&p->p_vmspace->vm_map, trunc_page(frame->srr0), ftype, VM_FAULT_NORMAL); if (rv == 0) { + PROC_LOCK(p); + --p->p_lock; PROC_UNLOCK(p); break; } @@ -241,6 +249,8 @@ trap(frame) "(SSR1=%#x)\n", p->p_pid, p->p_comm, frame->srr0, frame->srr1); trapsignal(p, SIGSEGV, EXC_ISI); + PROC_LOCK(p); + --p->p_lock; PROC_UNLOCK(p); break; case EXC_SC|EXC_USER: diff --git a/sys/powerpc/powerpc/trap.c b/sys/powerpc/powerpc/trap.c index 4878a2c..1aa2272 100644 --- a/sys/powerpc/powerpc/trap.c +++ b/sys/powerpc/powerpc/trap.c @@ -190,6 +190,8 @@ trap(frame) } case EXC_DSI|EXC_USER: PROC_LOCK(p); + ++p->p_lock; + PROC_UNLOCK(p); #if 0 curcpu()->ci_ev_udsi.ev_count++; #endif @@ -216,6 +218,8 @@ trap(frame) } else { trapsignal(p, SIGSEGV, EXC_DSI); } + PROC_LOCK(p); + --p->p_lock; PROC_UNLOCK(p); break; case EXC_ISI: @@ -224,6 +228,8 @@ trap(frame) goto brain_damage2; case EXC_ISI|EXC_USER: PROC_LOCK(p); + ++p->p_lock; + PROC_UNLOCK(p); #if 0 curcpu()->ci_ev_isi.ev_count++; #endif @@ -231,6 +237,8 @@ trap(frame) rv = vm_fault(&p->p_vmspace->vm_map, trunc_page(frame->srr0), ftype, VM_FAULT_NORMAL); if (rv == 0) { + PROC_LOCK(p); + --p->p_lock; PROC_UNLOCK(p); break; } @@ -241,6 +249,8 @@ trap(frame) "(SSR1=%#x)\n", p->p_pid, p->p_comm, frame->srr0, frame->srr1); trapsignal(p, SIGSEGV, EXC_ISI); + PROC_LOCK(p); + --p->p_lock; PROC_UNLOCK(p); break; case EXC_SC|EXC_USER: |