PERFORCE change 96873 for review

John Birrell jb at FreeBSD.org
Tue May 9 20:49:30 UTC 2006


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

Change 96873 by jb at jb_freebsd2 on 2006/05/09 20:48:32

	Add the hook for the cyclic timers for use when there isn't a
	higher performance time based interrupt source like the HPET.
	
	This hook allows the cyclic timers to function, but they can
	be fired no faster than 'hz' per second. If the CPU has a HPET,
	then the machine-dependent cyclic initialisation code should
	use that instead and leave the hook here NULL.
	
	The HPET was specified by Intel as recently as 2004, so as of
	today, most i386 systems in the wild won't have it.

Affected files ...

.. //depot/projects/dtrace/src/sys/i386/i386/local_apic.c#2 edit

Differences ...

==== //depot/projects/dtrace/src/sys/i386/i386/local_apic.c#2 (text+ko) ====

@@ -36,7 +36,9 @@
 
 #include "opt_hwpmc_hooks.h"
 
+#include "opt_cyclic.h"
 #include "opt_ddb.h"
+#include "opt_kdtrace.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -65,6 +67,10 @@
 #include <ddb/ddb.h>
 #endif
 
+#if defined(CYCLIC) || defined(KDTRACE)
+cyclic_clock_func_t	lapic_cyclic_clock_func;
+#endif
+
 /*
  * We can handle up to 60 APICs via our logical cluster IDs, but currently
  * the physical IDs on Intel processors up to the Pentium 4 are limited to
@@ -628,6 +634,19 @@
 			hardclock(TRAPF_USERMODE(&frame), TRAPF_PC(&frame));
 		else
 			hardclock_cpu(TRAPF_USERMODE(&frame));
+
+		/*
+		 * If the cyclic subsystem is configured and a callback
+		 * function has been registered, then call it to process
+		 * the high speed timers. If this function is registered
+		 * here, then there mustn't be a High Performance Event
+		 * Timer (HPET) on the CPU. A HPET provides higher
+		 * performance timer interrupts.
+		 */
+#if defined(CYCLIC) || defined(KDTRACE)
+		if (lapic_cyclic_clock_func != NULL)
+			(*lapic_cyclic_clock_func)();
+#endif
 	}
 
 	/* Fire statclock at stathz. */


More information about the p4-projects mailing list