[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 01/16] xen: Add support for VMware cpuid leaves
On 09/12/14 05:49, Jan Beulich wrote: On 11.09.14 at 21:49, <andrew.cooper3@xxxxxxxxxx> wrote: + case 0x10: + /* (Virtual) TSC frequency in kHz. */ + *eax = d->arch.tsc_khz; + /* (Virtual) Bus (local apic timer) frequency in kHz. */ + *ebx = 1000000000ull / APIC_BUS_CYCLE_NS / 1000ull;At least 1 pair of brackets please, especially as the placement of brackets affects the result of this particular calculation.Or simply eliminate one of the divisions using "1000000ull / APIC_BUS_CYCLE_NS". I am totally confused. I am happy to go with Jan's version.The confusion is that I get the same answer all the ways I try. This includes when APIC_BUS_CYCLE_NS is other values then 10. Some facts: 1) 1000000000 takes only 30bits, I am asking it to be 64. 2) I am only making it smaller in all cases. I have tested this on CentOS release 6.5 (Final) both 32 and 64 and it all says they are all the same. Here is my testing: build1:~/tmp/zz-div>p /etc/redhat-release CentOS release 6.5 (Final) build1:~/tmp/zz-div>uname -aLinux build1 2.6.32-431.el6.i686 #1 SMP Fri Nov 22 00:26:36 UTC 2013 i686 i686 i386 GNU/Linux build1:~/tmp/zz-div>cat zz-div.c #include <stdio.h> #include <stdint.h> int main(void) { uint32_t ebx1, ebx2, ebx3, ebx4, ebx5; uint32_t start = 1000000000ull; uint32_t APIC_BUS_CYCLE_NS; printf("start=0x%x, %d\n\n", start, start);for ( APIC_BUS_CYCLE_NS = 1; APIC_BUS_CYCLE_NS < 10000; APIC_BUS_CYCLE_NS++ ) { ebx1 = 1000000000ull / APIC_BUS_CYCLE_NS / 1000ull; ebx2 = (1000000000ull / APIC_BUS_CYCLE_NS) / 1000ull; ebx3 = 1000000000ull / (APIC_BUS_CYCLE_NS * 1000ull); ebx4 = 1000000000ull / 1000ull / APIC_BUS_CYCLE_NS; ebx5 = 1000000ull / APIC_BUS_CYCLE_NS; if ( ebx1 != ebx2 || ebx1 != ebx3 || ebx1 != ebx4 || ebx1 != ebx5 ) { printf("APIC_BUS_CYCLE_NS=%d:\n", APIC_BUS_CYCLE_NS); printf(" ebx1=0x%x, %d\n", ebx1, ebx1); printf(" ebx2=0x%x, %d\n", ebx2, ebx2); printf(" ebx3=0x%x, %d\n", ebx3, ebx3); printf(" ebx4=0x%x, %d\n", ebx4, ebx4); printf(" ebx5=0x%x, %d\n", ebx5, ebx5); } } return 0; } /* * Local variables: * mode: C * c-file-style: "BSD" * c-basic-offset: 4 * indent-tabs-mode: nil * End: */ build1:~/tmp/zz-div>gcc -g -o zz-div zz-div.c build1:~/tmp/zz-div>./zz-div start=0x3b9aca00, 1000000000 build1:~/tmp/zz-div> -Don Slutz Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |