diff options
-rw-r--r-- | sys/kern/subr_trap.c | 33 |
1 files changed, 3 insertions, 30 deletions
diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c index 4f18b28..ebd807e 100644 --- a/sys/kern/subr_trap.c +++ b/sys/kern/subr_trap.c @@ -161,29 +161,6 @@ ast(framep) } mtx_unlock_spin(&sched_lock); -#ifdef DIAGNOSTIC - /* - * As a diagnostic tool we make sure that td->td_ucred - * is NULL while we are in user space. This is - * because theoreticaly this field is only defined - * while the thread is in the kernel. Making it NULL - * will immediatly trap invalid usage of this field. - * In practice however we keep the reference to the ucred - * because it's almost always going to be the same cred we will - * need at the next syscall, and it can be expensive - * to keep dropping and reacquiring the reference. - * We thus stash it away elsewhere until we return - * to the kernel, where we bring it back. If - * DIAGNOSTIC is not defined we don't bother with - * making it NULL, and just leave it in place. - * (don't remove this comment without removing the pointers - * to it in sys/proc.h, trap.c, kern/kern_fork.c and here.) - */ - if (td->td_ucred) - panic("ast:thread got a cred before reaching AST"); - td->td_ucred = td->td_ucred_cache; - td->td_ucred_cache = NULL; -#endif /* DIAGNOSTIC */ if (td->td_ucred != p->p_ucred) cred_update_thread(td); if (flags & KEF_OWEUPC && sflag & PS_PROFIL) @@ -210,13 +187,9 @@ ast(framep) } userret(td, framep, sticks); -#ifdef DIAGNOSTIC /* see comment above */ - if (td->td_ucred_cache) - panic("ast:thread already has cached ucred"); - td->td_ucred_cache = td->td_ucred; - td->td_ucred = NULL; -#endif /* DIAGNOSTIC */ - +#ifdef DIAGNOSTIC + cred_free_thread(td); +#endif s = cpu_critical_enter(); } mtx_assert(&Giant, MA_NOTOWNED); |