Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 Jul 2010 15:10:05 +0000 (UTC)
From:      "Jayachandran C." <jchandra@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r210542 - head/sys/mips/rmi
Message-ID:  <201007271510.o6RFA5Wf029088@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jchandra
Date: Tue Jul 27 15:10:05 2010
New Revision: 210542
URL: http://svn.freebsd.org/changeset/base/210542

Log:
  The count/compare values have to be tracked per CPU.
  
  Reviewed by:	mav

Modified:
  head/sys/mips/rmi/tick.c

Modified: head/sys/mips/rmi/tick.c
==============================================================================
--- head/sys/mips/rmi/tick.c	Tue Jul 27 14:35:17 2010	(r210541)
+++ head/sys/mips/rmi/tick.c	Tue Jul 27 15:10:05 2010	(r210542)
@@ -62,9 +62,8 @@ struct timecounter *platform_timecounter
 static DPCPU_DEFINE(uint32_t, cycles_per_tick);
 static uint32_t cycles_per_usec;
 
-static u_int32_t counter_upper = 0;
-static u_int32_t counter_lower_last = 0;
-
+static DPCPU_DEFINE(uint32_t, counter_upper);
+static DPCPU_DEFINE(uint32_t, counter_lower_last);
 static DPCPU_DEFINE(uint32_t, compare_ticks);
 static DPCPU_DEFINE(uint32_t, lost_ticks);
 
@@ -106,6 +105,7 @@ tick_ticker(void)
 {
 	uint64_t ret;
 	uint32_t ticktock;
+	uint32_t t_lower_last, t_upper;
 
 	/*
 	 * XXX: MIPS64 platforms can read 64-bits of counter directly.
@@ -115,12 +115,16 @@ tick_ticker(void)
 	 */
 	ticktock = mips_rd_count();
 	critical_enter();
-	if (ticktock < counter_lower_last)
-		counter_upper++;
-	counter_lower_last = ticktock;
+	t_lower_last = DPCPU_GET(counter_lower_last);
+	t_upper = DPCPU_GET(counter_upper);
+	if (ticktock < t_lower_last)
+		t_upper++;
+	t_lower_last = ticktock;
 	critical_exit();
 
-	ret = ((uint64_t) counter_upper << 32) | counter_lower_last;
+	DPCPU_SET(counter_upper, t_upper);
+	DPCPU_SET(counter_lower_last, t_lower_last);
+	ret = ((uint64_t)t_upper << 32) | t_lower_last;
 	return (ret);
 }
 
@@ -265,9 +269,9 @@ clock_intr(void *arg)
 		mips_wr_compare(0xffffffff);
 
 	critical_enter();
-	if (count < counter_lower_last) {
-		counter_upper++;
-		counter_lower_last = count;
+	if (count < DPCPU_GET(counter_lower_last)) {
+		DPCPU_SET(counter_upper, DPCPU_GET(counter_upper) + 1);
+		DPCPU_SET(counter_lower_last, count);
 	}
 
 	if (cycles_per_tick > 0) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201007271510.o6RFA5Wf029088>