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