From owner-svn-src-all@FreeBSD.ORG Tue Apr 12 23:49:08 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0CD34106564A; Tue, 12 Apr 2011 23:49:08 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id F0AD08FC08; Tue, 12 Apr 2011 23:49:07 +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 p3CNn7ri039182; Tue, 12 Apr 2011 23:49:07 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p3CNn7kK039179; Tue, 12 Apr 2011 23:49:07 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201104122349.p3CNn7kK039179@svn.freebsd.org> From: Jung-uk Kim Date: Tue, 12 Apr 2011 23:49:07 +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: r220584 - in head/sys: amd64/amd64 i386/i386 X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Apr 2011 23:49:08 -0000 Author: jkim Date: Tue Apr 12 23:49:07 2011 New Revision: 220584 URL: http://svn.freebsd.org/changeset/base/220584 Log: Reduce errors in effective frequency calculation. Modified: head/sys/amd64/amd64/machdep.c head/sys/i386/i386/machdep.c Modified: head/sys/amd64/amd64/machdep.c ============================================================================== --- head/sys/amd64/amd64/machdep.c Tue Apr 12 23:04:01 2011 (r220583) +++ head/sys/amd64/amd64/machdep.c Tue Apr 12 23:49:07 2011 (r220584) @@ -546,7 +546,7 @@ int cpu_est_clockrate(int cpu_id, uint64_t *rate) { uint64_t tsc1, tsc2; - uint64_t acnt, mcnt; + uint64_t acnt, mcnt, perf; register_t reg; if (pcpu_find(cpu_id) == NULL || rate == NULL) @@ -579,7 +579,8 @@ cpu_est_clockrate(int cpu_id, uint64_t * acnt = rdmsr(MSR_APERF); tsc2 = rdtsc(); intr_restore(reg); - *rate = (tsc2 - tsc1) / 1000 * acnt / mcnt * 1000000; + perf = 1000 * acnt / mcnt; + *rate = (tsc2 - tsc1) * perf; } else { tsc1 = rdtsc(); DELAY(1000); Modified: head/sys/i386/i386/machdep.c ============================================================================== --- head/sys/i386/i386/machdep.c Tue Apr 12 23:04:01 2011 (r220583) +++ head/sys/i386/i386/machdep.c Tue Apr 12 23:49:07 2011 (r220584) @@ -1137,7 +1137,7 @@ int cpu_est_clockrate(int cpu_id, uint64_t *rate) { uint64_t tsc1, tsc2; - uint64_t acnt, mcnt; + uint64_t acnt, mcnt, perf; register_t reg; if (pcpu_find(cpu_id) == NULL || rate == NULL) @@ -1172,7 +1172,8 @@ cpu_est_clockrate(int cpu_id, uint64_t * acnt = rdmsr(MSR_APERF); tsc2 = rdtsc(); intr_restore(reg); - *rate = (tsc2 - tsc1) / 1000 * acnt / mcnt * 1000000; + perf = 1000 * acnt / mcnt; + *rate = (tsc2 - tsc1) * perf; } else { tsc1 = rdtsc(); DELAY(1000);