svn commit: r240246 - head/sys/kern
Attilio Rao
attilio at FreeBSD.org
Sat Sep 8 18:35:16 UTC 2012
Author: attilio
Date: Sat Sep 8 18:35:15 2012
New Revision: 240246
URL: http://svn.freebsd.org/changeset/base/240246
Log:
Move the checks for td_pinned, td_critnest, TDP_NOFAULTING and
TDP_NOSLEEPING leaking from syscallret() to userret() so that also
trap handling is covered. Also, the check on td_locks is not duplicated
between the two functions.
Reported by: avg
Reviewed by: kib
MFC after: 1 week
Modified:
head/sys/kern/subr_syscall.c
head/sys/kern/subr_trap.c
Modified: head/sys/kern/subr_syscall.c
==============================================================================
--- head/sys/kern/subr_syscall.c Sat Sep 8 18:29:53 2012 (r240245)
+++ head/sys/kern/subr_syscall.c Sat Sep 8 18:35:15 2012 (r240246)
@@ -172,27 +172,6 @@ syscallret(struct thread *td, int error,
p = td->td_proc;
/*
- * Check for misbehavior.
- */
- WITNESS_WARN(WARN_PANIC, NULL, "System call %s returning",
- syscallname(p, sa->code));
- KASSERT(td->td_critnest == 0,
- ("System call %s returning in a critical section",
- syscallname(p, sa->code)));
- KASSERT(td->td_locks == 0,
- ("System call %s returning with %d locks held",
- syscallname(p, sa->code), td->td_locks));
- KASSERT((td->td_pflags & TDP_NOFAULTING) == 0,
- ("System call %s returning with pagefaults disabled",
- syscallname(p, sa->code)));
- KASSERT((td->td_pflags & TDP_NOSLEEPING) == 0,
- ("System call %s returning with sleep disabled",
- syscallname(p, sa->code)));
- KASSERT(td->td_pinned == 0,
- ("System call %s returning with pinned thread",
- syscallname(p, sa->code)));
-
- /*
* Handle reschedule and other end-of-syscall issues
*/
userret(td, td->td_frame);
Modified: head/sys/kern/subr_trap.c
==============================================================================
--- head/sys/kern/subr_trap.c Sat Sep 8 18:29:53 2012 (r240245)
+++ head/sys/kern/subr_trap.c Sat Sep 8 18:35:15 2012 (r240246)
@@ -139,8 +139,21 @@ userret(struct thread *td, struct trapfr
#ifdef XEN
PT_UPDATES_FLUSH();
#endif
+
+ /*
+ * Check for misbehavior.
+ */
+ WITNESS_WARN(WARN_PANIC, NULL, "userret: returning");
+ KASSERT(td->td_critnest == 0,
+ ("userret: Returning in a critical section"));
KASSERT(td->td_locks == 0,
- ("userret: Returning with %d locks held.", td->td_locks));
+ ("userret: Returning with %d locks held", td->td_locks));
+ KASSERT((td->td_pflags & TDP_NOFAULTING) == 0,
+ ("userret: Returning with pagefaults disabled"));
+ KASSERT((td->td_pflags & TDP_NOSLEEPING) == 0,
+ ("userret: Returning with sleep disabled"));
+ KASSERT(td->td_pinned == 0,
+ ("userret: Returning with with pinned thread"));
#ifdef VIMAGE
/* Unfortunately td_vnet_lpush needs VNET_DEBUG. */
VNET_ASSERT(curvnet == NULL,
More information about the svn-src-all
mailing list