diff options
author | jhb <jhb@FreeBSD.org> | 2001-02-22 16:23:12 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2001-02-22 16:23:12 +0000 |
commit | 667eb173f1c0c4f23ac24763ead9d31ebe52722e (patch) | |
tree | 003a9d966c29c0dc69496fc533337b7b1efb4824 | |
parent | c591cfd9c6b57fd5950b27d33b6b413a0b4dcf31 (diff) | |
download | FreeBSD-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.c | 7 | ||||
-rw-r--r-- | sys/amd64/amd64/trap.c | 5 | ||||
-rw-r--r-- | sys/i386/i386/trap.c | 5 | ||||
-rw-r--r-- | sys/kern/subr_trap.c | 5 |
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); } /* |