PERFORCE change 132140 for review

John Birrell jb at FreeBSD.org
Sun Dec 30 17:36:45 PST 2007


http://perforce.freebsd.org/chv.cgi?CH=132140

Change 132140 by jb at jb_freebsd1 on 2007/12/31 01:35:52

	For the time being, force debug mode on so we can get a list of the
	leaked allocations (if any).
	
	Use stack_print_ddb() instead of stack_print() to avoid tripping over
	locks. It _is_ a debug routine anyway and of course this means that
	the module will only load into a kernel containing DDB.
	
	I'm not sure when the SYSUNINIT should run. If it runs too early it
	reports allocations that are still to be freed. Not all modules are
	device drivers, so SI_SUB_DRIVERS probably isn't correct. Certainly
	the DTrace modules have to operate as early in the kernel initialisation
	as possible to be useful tracing the boot process.
	
	Remove the 'static' from kmem_show() so that I can call it myself. I
	found that it was running after my symbols had been discarded, leaving
	the symbol names I was looking for defaulted to something unhelpful.
	
	Note that the ZFS references in this file will have to change. They
	don't belong here.

Affected files ...

.. //depot/projects/dtrace/src/sys/compat/opensolaris/kern/opensolaris_kmem.c#3 edit

Differences ...

==== //depot/projects/dtrace/src/sys/compat/opensolaris/kern/opensolaris_kmem.c#3 (text+ko) ====

@@ -40,6 +40,8 @@
 #include <vm/vm_kern.h>
 #include <vm/vm_map.h>
 
+#define KMEM_DEBUG
+
 #ifdef KMEM_DEBUG
 #include <sys/queue.h>
 #include <sys/stack.h>
@@ -236,7 +238,8 @@
 }
 
 #ifdef KMEM_DEBUG
-static void
+void kmem_show(void *);
+void
 kmem_show(void *dummy __unused)
 {
 	struct kmem_item *i;
@@ -248,12 +251,16 @@
 		printf("KMEM_DEBUG: Leaked elements:\n\n");
 		LIST_FOREACH(i, &kmem_items, next) {
 			printf("address=%p\n", i);
-			stack_print(&i->stack);
+			/*
+			 * Cheat and use the DDB routine
+			 * to avoid lock issues.
+			 */
+			stack_print_ddb(&i->stack);
 			printf("\n");
 		}
 	}
 	mtx_unlock(&kmem_items_mtx);
 }
 
-SYSUNINIT(sol_kmem, SI_SUB_DRIVERS, SI_ORDER_FIRST, kmem_show, NULL);
+SYSUNINIT(sol_kmem, SI_SUB_CPU, SI_ORDER_FIRST, kmem_show, NULL);
 #endif	/* KMEM_DEBUG */


More information about the p4-projects mailing list