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);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to