PERFORCE change 100025 for review

John Birrell jb at FreeBSD.org
Mon Jun 26 05:37:25 UTC 2006


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

Change 100025 by jb at jb_freebsd2 on 2006/06/26 05:37:23

	The use of FreeBSD's semaphores here creates scheduler instability.
	This device needs a clean path from the timer interrupt.
	
	For the time being, since I'm only working on single processor
	systems, comment out the semaphore calls. When I get access to a 
	multi-cpu machine, I'll need to implement a simple semaphore system
	for use here.

Affected files ...

.. //depot/projects/dtrace/src/sys/cddl/kern/cyclic.c#4 edit

Differences ...

==== //depot/projects/dtrace/src/sys/cddl/kern/cyclic.c#4 (text+ko) ====

@@ -1006,7 +1006,9 @@
 	/*
 	 * We can now let the remove operation complete.
 	 */
+#ifdef DOODAD
 	sema_post(&cpu->cyp_modify_wait);
+#endif
 }
 
 /*
@@ -1257,7 +1259,9 @@
 		 */
 		if (nlev == CY_SOFT_LEVELS) {
 			CYC_TRACE0(cpu, level, "resize-kick");
+#ifdef DOODAD
 			sema_post(&cpu->cyp_modify_wait);
+#endif
 		} else {
 			ASSERT(nlev < CY_SOFT_LEVELS);
 			if (level != CY_LOW_LEVEL) {
@@ -1434,7 +1438,9 @@
 	/*
 	 * Now block, waiting for the resize operation to complete.
 	 */
+#ifdef DOODAD
 	sema_wait(&cpu->cyp_modify_wait);
+#endif
 	ASSERT(cpu->cyp_modify_levels == CY_SOFT_LEVELS);
 
 	/*
@@ -1875,8 +1881,10 @@
 		return (0);
 	}
 
+#ifdef DOODAD
 	if (cpu->cyp_rpend != 0)
 		sema_wait(&cpu->cyp_modify_wait);
+#endif
 
 	ASSERT(cpu->cyp_state == CYS_REMOVING);
 
@@ -2140,7 +2148,9 @@
 
 	cpu->cyp_cpu = c;
 
+#ifdef DOODAD
 	sema_init(&cpu->cyp_modify_wait, 0, "cyclic modify");
+#endif
 
 	cpu->cyp_size = 1;
 	cpu->cyp_heap = kmem_zalloc(sizeof (cyc_index_t), KM_SLEEP);
@@ -2221,7 +2231,9 @@
 		pc->cypc_buf = NULL;
 	}
 
+#ifdef DOODAD
 	sema_destroy(&cpu->cyp_modify_wait);
+#endif
 
 	/*
 	 * Finally, clean up our remaining dynamic structures and NULL out


More information about the p4-projects mailing list