PERFORCE change 92711 for review

John Baldwin jhb at FreeBSD.org
Fri Mar 3 20:26:55 PST 2006


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

Change 92711 by jhb at jhb_twclab on 2006/03/04 04:26:09

	Make my alpha happy with still using the timecounter (either
	i8254 or rpcc) for cpu_ticks.
	- Call tc_cpu_ticks() every tc_ticktock() to handle rollover in
	  the timecounter if calcru() isn't called often enough.
	- Cast tc_counter_mask to uint64_t when updating base to handle
	  the case where tc_counter_mask == ~0u (in which case the unsigned
	  value of ~0u + 1 == 0, and thus base was not being changed on
	  timecounter roll overs).
	
	With help from:	phk

Affected files ...

.. //depot/projects/smpng/sys/kern/kern_tc.c#35 edit

Differences ...

==== //depot/projects/smpng/sys/kern/kern_tc.c#35 (text+ko) ====

@@ -115,6 +115,7 @@
 
 #undef TC_STATS
 
+static uint64_t tc_cpu_ticks(void);
 static void tc_windup(void);
 static void cpu_tick_calibrate(int);
 
@@ -759,6 +760,7 @@
 		return;
 	count = 0;
 	tc_windup();
+	(void)tc_cpu_ticks();
 	if (time_uptime != last_calib && !(time_uptime & 0xf)) {
 		cpu_tick_calibrate(0);
 		last_calib = time_uptime;
@@ -797,8 +799,7 @@
 static int cpu_tick_variable;
 static uint64_t	cpu_tick_frequency;
 
-static
-uint64_t
+static uint64_t
 tc_cpu_ticks(void)
 {
 	static uint64_t base;
@@ -809,7 +810,7 @@
 	tc = timehands->th_counter;
 	u = tc->tc_get_timecount(tc) & tc->tc_counter_mask;
 	if (u < last)
-		base += tc->tc_counter_mask + 1;
+		base += (uint64_t)tc->tc_counter_mask + 1;
 	last = u;
 	return (u + base);
 }


More information about the p4-projects mailing list