PERFORCE change 87400 for review

Peter Wemm peter at FreeBSD.org
Tue Nov 29 00:49:29 GMT 2005


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

Change 87400 by peter at peter_daintree on 2005/11/29 00:48:28

	add a knob to use the TSC to implement the DELAY() spin loop.

Affected files ...

.. //depot/projects/hammer/sys/amd64/amd64/tsc.c#12 edit
.. //depot/projects/hammer/sys/amd64/include/clock.h#17 edit
.. //depot/projects/hammer/sys/amd64/isa/clock.c#49 edit

Differences ...

==== //depot/projects/hammer/sys/amd64/amd64/tsc.c#12 (text+ko) ====

@@ -128,3 +128,15 @@
 {
 	return (rdtsc());
 }
+
+void
+tsc_DELAY(int n)
+{
+	uint64_t start, end, now;
+
+	start = rdtsc();
+	end = start + (tsc_freq * n) / 1000000;
+	do {
+		now = rdtsc();
+	} while (now < end || (now > start && end < start));
+}

==== //depot/projects/hammer/sys/amd64/include/clock.h#17 (text+ko) ====

@@ -37,6 +37,7 @@
 int	sysbeep(int pitch, int period);
 void	init_TSC(void);
 void	init_TSC_tc(void);
+void	tsc_DELAY(int);
 
 #endif /* _KERNEL */
 

==== //depot/projects/hammer/sys/amd64/isa/clock.c#49 (text+ko) ====

@@ -255,6 +255,9 @@
 	return ((high << 8) | low);
 }
 
+static int do_tsc_delay = 0;
+SYSCTL_INT(_debug, OID_AUTO, do_tsc_delay, CTLFLAG_RW, &do_tsc_delay, 0,
+	"use TSC for DELAY()");
 /*
  * Wait "n" microseconds.
  * Relies on timer 1 counting down from (timer_freq / hz)
@@ -269,7 +272,13 @@
 	int getit_calls = 1;
 	int n1;
 	static int state = 0;
+#endif
 
+	if (tsc_freq != 0 && !tsc_is_broken) {
+		tsc_DELAY(n);
+		return;
+	}
+#ifdef DELAYDEBUG
 	if (state == 0) {
 		state = 1;
 		for (n1 = 1; n1 <= 10000000; n1 *= 10)


More information about the p4-projects mailing list