Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 8 Sep 2012 18:35:15 +0000 (UTC)
From:      Attilio Rao <attilio@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r240246 - head/sys/kern
Message-ID:  <201209081835.q88IZFhV036109@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201209081835.q88IZFhV036109>