From f9668ab4854800aead9183375e4d4725c1dcc2b6 Mon Sep 17 00:00:00 2001 From: benno Date: Sun, 12 May 2002 06:06:24 +0000 Subject: Do the correct locking on processes for DSI and ISI traps. Copied from: sparc64 --- sys/powerpc/aim/trap.c | 10 ++++++++++ sys/powerpc/powerpc/trap.c | 10 ++++++++++ 2 files changed, 20 insertions(+) (limited to 'sys/powerpc') 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: -- cgit v1.1