From owner-svn-src-head@FreeBSD.ORG Wed Apr 13 21:41:32 2011 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 156151065673; Wed, 13 Apr 2011 21:41:32 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from tensor.andric.com (cl-327.ede-01.nl.sixxs.net [IPv6:2001:7b8:2ff:146::2]) by mx1.freebsd.org (Postfix) with ESMTP id CBDE88FC08; Wed, 13 Apr 2011 21:41:31 +0000 (UTC) Received: from [IPv6:2001:7b8:3a7:0:ad8b:7db5:9520:7ed0] (unknown [IPv6:2001:7b8:3a7:0:ad8b:7db5:9520:7ed0]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by tensor.andric.com (Postfix) with ESMTPSA id AB82F5C59; Wed, 13 Apr 2011 23:41:29 +0200 (CEST) Message-ID: <4DA6189A.5040200@FreeBSD.org> Date: Wed, 13 Apr 2011 23:41:46 +0200 From: Dimitry Andric Organization: The FreeBSD Project User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16pre) Gecko/20110319 Lanikai/3.1.10pre MIME-Version: 1.0 To: Jung-uk Kim References: <201104122349.p3CNn7kK039179@svn.freebsd.org> In-Reply-To: <201104122349.p3CNn7kK039179@svn.freebsd.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r220584 - in head/sys: amd64/amd64 i386/i386 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: Wed, 13 Apr 2011 21:41:32 -0000 On 2011-04-13 01:49, Jung-uk Kim wrote: > 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); Hmm... on my VMs this now leads to: Fatal trap 18: integer divide fault while in kernel mode cpuid = 0; apic id = 00 instruction pointer = 0x20:0xffffffff809c908d stack pointer = 0x28:0xffffff80f6a14850 frame pointer = 0x28:0xffffff80f6a14880 code segment = base 0x0, limit 0xfffff, type 0x1b = DPL 0, pres 1, long 1, def32 0, gran 1 processor eflags = interrupt enabled, resume, IOPL = 0 current process = 54 (sysctl) [ thread pid 54 tid 100060 ] Stopped at cpu_est_clockrate+0x11d: divq %rdi,%eax db> bt Tracing pid 54 tid 100060 td 0xfffffe0002dbe8c0 cpu_est_clockrate() at cpu_est_clockrate+0x11d cf_get_method() at cf_get_method+0x2d4 cpufreq_curr_sysctl() at cpufreq_curr_sysctl+0x6c sysctl_root() at sysctl_root+0x19d userland_sysctl() at userland_sysctl+0x1a4 __sysctl() at __sysctl+0x75 syscallenter() at syscallenter+0x201 syscall() at syscall+0x38 Xfast_syscall() at Xfast_syscall+0xe1 --- syscall (202, FreeBSD ELF64, __sysctl), rip = 0x8009472ac, rsp = 0x7fffffffca38, rbp = 0x7fffffffd310 --- But I don't really see why, yet. :) With r220532, it worked fine.