summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-02-22 16:23:12 +0000
committerjhb <jhb@FreeBSD.org>2001-02-22 16:23:12 +0000
commit667eb173f1c0c4f23ac24763ead9d31ebe52722e (patch)
tree003a9d966c29c0dc69496fc533337b7b1efb4824
parentc591cfd9c6b57fd5950b27d33b6b413a0b4dcf31 (diff)
downloadFreeBSD-src-667eb173f1c0c4f23ac24763ead9d31ebe52722e.zip
FreeBSD-src-667eb173f1c0c4f23ac24763ead9d31ebe52722e.tar.gz
- Use TRAPF_PC() on the alpha to acess the PC in the trap frame.
- Don't hold sched_lock around addupc_task() as this apparently breaks profiling badly due to sched_lock being held across copyin(). Reported by: bde (2)
-rw-r--r--sys/alpha/alpha/trap.c7
-rw-r--r--sys/amd64/amd64/trap.c5
-rw-r--r--sys/i386/i386/trap.c5
-rw-r--r--sys/kern/subr_trap.c5
4 files changed, 9 insertions, 13 deletions
diff --git a/sys/alpha/alpha/trap.c b/sys/alpha/alpha/trap.c
index 6308caf..0ba8164 100644
--- a/sys/alpha/alpha/trap.c
+++ b/sys/alpha/alpha/trap.c
@@ -139,11 +139,10 @@ userret(p, frame, oticks)
mtx_unlock_spin(&sched_lock);
if (!mtx_owned(&Giant))
mtx_lock(&Giant);
- mtx_lock_spin(&sched_lock);
- addupc_task(p, frame->tf_regs[FRAME_PC],
+ addupc_task(p, TRAPF_PC(frame),
(int)(p->p_sticks - oticks) * psratio);
- }
- mtx_unlock_spin(&sched_lock);
+ } else
+ mtx_unlock_spin(&sched_lock);
}
static void
diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index ddf3d77..41d0a7f 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -211,11 +211,10 @@ userret(p, frame, oticks)
/* XXX - do we need Giant? */
if (!mtx_owned(&Giant))
mtx_lock(&Giant);
- mtx_lock_spin(&sched_lock);
addupc_task(p, TRAPF_PC(frame),
(u_int)(p->p_sticks - oticks) * psratio);
- }
- mtx_unlock_spin(&sched_lock);
+ } else
+ mtx_unlock_spin(&sched_lock);
}
/*
diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c
index ddf3d77..41d0a7f 100644
--- a/sys/i386/i386/trap.c
+++ b/sys/i386/i386/trap.c
@@ -211,11 +211,10 @@ userret(p, frame, oticks)
/* XXX - do we need Giant? */
if (!mtx_owned(&Giant))
mtx_lock(&Giant);
- mtx_lock_spin(&sched_lock);
addupc_task(p, TRAPF_PC(frame),
(u_int)(p->p_sticks - oticks) * psratio);
- }
- mtx_unlock_spin(&sched_lock);
+ } else
+ mtx_unlock_spin(&sched_lock);
}
/*
diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c
index ddf3d77..41d0a7f 100644
--- a/sys/kern/subr_trap.c
+++ b/sys/kern/subr_trap.c
@@ -211,11 +211,10 @@ userret(p, frame, oticks)
/* XXX - do we need Giant? */
if (!mtx_owned(&Giant))
mtx_lock(&Giant);
- mtx_lock_spin(&sched_lock);
addupc_task(p, TRAPF_PC(frame),
(u_int)(p->p_sticks - oticks) * psratio);
- }
- mtx_unlock_spin(&sched_lock);
+ } else
+ mtx_unlock_spin(&sched_lock);
}
/*
OpenPOWER on IntegriCloud