summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgallatin <gallatin@FreeBSD.org>2002-02-19 03:13:39 +0000
committergallatin <gallatin@FreeBSD.org>2002-02-19 03:13:39 +0000
commit53507926a42033a398cb6f8e44dd99d68aafab0f (patch)
treeb07b80bbe0e127f3eadc6495de10132aa88ca32a
parentffdde8ed998b2a6fc54e18d6771e0757bd735c84 (diff)
downloadFreeBSD-src-53507926a42033a398cb6f8e44dd99d68aafab0f.zip
FreeBSD-src-53507926a42033a398cb6f8e44dd99d68aafab0f.tar.gz
MFi386: merge changes from i386/trap.c rev 1.212
If the credential on an incoming thread is correct, don't bother reaquiring it. In the same vein, don't bother dropping the thread cred when going to userland. We are guaranteed to need it when we come back, (which we are guaranteed to do).
-rw-r--r--sys/alpha/alpha/trap.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/sys/alpha/alpha/trap.c b/sys/alpha/alpha/trap.c
index c4c402a..2cdf540d 100644
--- a/sys/alpha/alpha/trap.c
+++ b/sys/alpha/alpha/trap.c
@@ -298,9 +298,8 @@ trap(a0, a1, a2, entry, framep)
sticks = td->td_kse->ke_sticks;
td->td_frame = framep;
KASSERT(td->td_ucred == NULL, ("already have a ucred"));
- PROC_LOCK(p);
- td->td_ucred = crhold(p->p_ucred);
- PROC_UNLOCK(p);
+ if (td->td_ucred != p->p_ucred)
+ cred_update_thread(td);
} else {
sticks = 0; /* XXX bogus -Wuninitialized warning */
KASSERT(cold || td->td_ucred != NULL,
@@ -626,10 +625,12 @@ out:
framep->tf_regs[FRAME_SP] = alpha_pal_rdusp();
userret(td, framep, sticks);
mtx_assert(&Giant, MA_NOTOWNED);
+#ifdef INVARIANTS
mtx_lock(&Giant);
crfree(td->td_ucred);
mtx_unlock(&Giant);
td->td_ucred = NULL;
+#endif
}
return;
@@ -699,9 +700,8 @@ syscall(code, framep)
opc = framep->tf_regs[FRAME_PC] - 4;
sticks = td->td_kse->ke_sticks;
KASSERT(td->td_ucred == NULL, ("already have a ucred"));
- PROC_LOCK(p);
- td->td_ucred = crhold(p->p_ucred);
- PROC_UNLOCK(p);
+ if (td->td_ucred != p->p_ucred)
+ cred_update_thread(td);
#ifdef DIAGNOSTIC
alpha_fpstate_check(td);
@@ -822,10 +822,12 @@ syscall(code, framep)
*/
STOPEVENT(p, S_SCX, code);
+#ifdef INVARIANTS
mtx_lock(&Giant);
crfree(td->td_ucred);
mtx_unlock(&Giant);
td->td_ucred = NULL;
+#endif
#ifdef WITNESS
if (witness_list(td)) {
panic("system call %s returning with mutex(s) held\n",
OpenPOWER on IntegriCloud