svn commit: r218688 - head/sys/kern

Bjoern A. Zeeb bz at FreeBSD.org
Mon Feb 14 20:49:38 UTC 2011


Author: bz
Date: Mon Feb 14 20:49:37 2011
New Revision: 218688
URL: http://svn.freebsd.org/changeset/base/218688

Log:
  Mfp4 CH=177256:
  
    Catch a set vnet upon return to user space. This usually
    means return paths with CURVNET_RESTORE() missing.
  
    If VNET_DEBUG is turned on we can even tell the function
    that did the CURVNET_SET() which is really helpful; else
    we print "N/A".
  
    Sponsored by: The FreeBSD Foundation
    Sponsored by: CK Software GmbH
    Reviewed by:  jhb
  
  MFC after:	11 days

Modified:
  head/sys/kern/subr_trap.c

Modified: head/sys/kern/subr_trap.c
==============================================================================
--- head/sys/kern/subr_trap.c	Mon Feb 14 20:05:37 2011	(r218687)
+++ head/sys/kern/subr_trap.c	Mon Feb 14 20:49:37 2011	(r218688)
@@ -74,6 +74,10 @@ __FBSDID("$FreeBSD$");
 
 #include <machine/cpu.h>
 
+#ifdef VIMAGE
+#include <net/vnet.h>
+#endif
+
 #ifdef XEN
 #include <vm/vm.h>
 #include <vm/vm_param.h>
@@ -126,6 +130,13 @@ userret(struct thread *td, struct trapfr
 	sched_userret(td);
 	KASSERT(td->td_locks == 0,
 	    ("userret: Returning with %d locks held.", td->td_locks));
+#ifdef VIMAGE
+	/* Unfortunately td_vnet_lpush needs VNET_DEBUG. */
+	VNET_ASSERT(curvnet == NULL,
+	    ("%s: Returning on td %p (pid %d, %s) with vnet %p set in %s",
+	    __func__, td, p->p_pid, td->td_name, curvnet,
+	    (td->td_vnet_lpush != NULL) ? td->td_vnet_lpush : "N/A"));
+#endif
 #ifdef XEN
 	PT_UPDATES_FLUSH();
 #endif


More information about the svn-src-head mailing list