From owner-svn-src-head@FreeBSD.ORG Tue Jul 27 15:10:05 2010 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7BB761065672; Tue, 27 Jul 2010 15:10:05 +0000 (UTC) (envelope-from jchandra@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 507988FC13; Tue, 27 Jul 2010 15:10:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o6RFA53w029090; Tue, 27 Jul 2010 15:10:05 GMT (envelope-from jchandra@svn.freebsd.org) Received: (from jchandra@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o6RFA5Wf029088; Tue, 27 Jul 2010 15:10:05 GMT (envelope-from jchandra@svn.freebsd.org) Message-Id: <201007271510.o6RFA5Wf029088@svn.freebsd.org> From: "Jayachandran C." Date: Tue, 27 Jul 2010 15:10:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r210542 - head/sys/mips/rmi X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Jul 2010 15:10:05 -0000 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) {