svn commit: r220584 - in head/sys: amd64/amd64 i386/i386

Dimitry Andric dim at FreeBSD.org
Wed Apr 13 21:49:19 UTC 2011


On 2011-04-13 23:41, Dimitry Andric wrote:
...
> But I don't really see why, yet. :)  With r220532, it worked fine.

Ah, I failed to notice the commit that came before, r220583.
Apparently, it can happen (at least in a VM environment) that the
DELAY(1000) in this fragment from cpu_est_clockrate():

                 wrmsr(MSR_MPERF, 0);
                 wrmsr(MSR_APERF, 0);
                 tsc1 = rdtsc();
                 DELAY(1000);
                 mcnt = rdmsr(MSR_MPERF);
                 acnt = rdmsr(MSR_APERF);
                 tsc2 = rdtsc();
                 intr_restore(reg);
                 perf = 1000 * acnt / mcnt;

will still read 0 from MSR_MPERF, leading to a division by zero.  Maybe
just fallback to the second method in the 'else' branch then?


More information about the svn-src-head mailing list