summaryrefslogtreecommitdiffstats
path: root/sys/powerpc
diff options
context:
space:
mode:
authorbenno <benno@FreeBSD.org>2002-05-12 06:06:24 +0000
committerbenno <benno@FreeBSD.org>2002-05-12 06:06:24 +0000
commitf9668ab4854800aead9183375e4d4725c1dcc2b6 (patch)
tree3e04de688dc717e30eaec2e406c6b83d41c58227 /sys/powerpc
parent49d0eba5f2e4c8bc62afa196db9dc683dd92018e (diff)
downloadFreeBSD-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.c10
-rw-r--r--sys/powerpc/powerpc/trap.c10
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:
OpenPOWER on IntegriCloud