OpenCloudOS-Kernel/arch/x86
Andi Kleen 51fc97b935 x86: allow TSC clock source on AMD Fam10h and some cleanup
After a lot of discussions with AMD it turns out that TSC
on Fam10h CPUs is synchronized when the CONSTANT_TSC cpuid bit is set.
Or rather that if there are ever systems where that is not
true it would be their BIOS' task to disable the bit.

So finally use TSC gettimeofday on Fam10h by default.

Or rather it is always used now on CPUs where the AMD
specific CONSTANT_TSC bit is set.

This gives a nice speed bost for gettimeofday() on these systems
which tends to be by far the most common v/syscall.

On a Fam10h system here TSC gtod uses about 20% of the CPU time of
acpi_pm based gtod(). This was measured on 32bit, on 64bit
it is even better because TSC gtod() can use a vsyscall
and stay in ring 3, which acpi_pm doesn't.

The Intel check simply checks for CONSTANT_TSC too without hardcoding
Intel vendor. This is equivalent on 64bit because all 64bit capable Intel
CPUs will have CONSTANT_TSC set.

On Intel there is no CPU supplied CONSTANT_TSC bit currently,
but we synthesize one based on hardcoded knowledge which steppings
have p-state invariant TSC.

So the new logic is now: On CPUs which have the AMD specific
CONSTANT_TSC bit set or on Intel CPUs which are new enough
to be known to have p-state invariant TSC always use
TSC based gettimeofday()

Cc: lenb@kernel.org

Signed-off-by: Andi Kleen <ak@suse.de>

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2008-01-30 13:32:40 +01:00
..
boot x86: hlt on early crash 2008-01-30 13:32:31 +01:00
configs x86: 64-bit, make sparsemem vmemmap the only memory model 2008-01-30 13:30:47 +01:00
crypto [CRYPTO] twofish: Merge common glue code 2008-01-14 17:07:57 +11:00
ia32 arch/x86/ia32: use time_before, time_before_eq, etc. 2008-01-30 13:32:17 +01:00
kernel x86: allow TSC clock source on AMD Fam10h and some cleanup 2008-01-30 13:32:40 +01:00
lguest x86: change write_gdt_entry signature. 2008-01-30 13:31:13 +01:00
lib x86: unify arch/x86/lib/Makefile(s) 2008-01-30 13:32:31 +01:00
mach-default spelling fixes: arch/i386/ 2007-10-20 01:13:56 +02:00
mach-es7000 i386: es7000 minor cleanups 2007-10-17 20:16:15 +02:00
mach-generic spelling fixes: arch/i386/ 2007-10-20 01:13:56 +02:00
mach-visws x86: cleanup mpspec variants 2008-01-30 13:30:35 +01:00
mach-voyager x86: remove all definitions with fastcall 2008-01-30 13:31:17 +01:00
math-emu x86: arch/x86/math-emu/errors.c: fix printk warnings 2008-01-30 13:32:13 +01:00
mm x86: clean up k8topology.c 2008-01-30 13:32:36 +01:00
oprofile x86: fix style errors in nmi_int.c 2008-01-30 13:32:33 +01:00
pci x86: add some pirq debugging 2008-01-30 13:32:00 +01:00
power x86: make __{save,restore}_processor_state static 2008-01-30 13:31:23 +01:00
vdso x86: gitignore arch/x86/vdso files 2008-01-30 13:32:32 +01:00
video i386: move video 2007-10-11 11:16:56 +02:00
xen x86: remove all definitions with fastcall 2008-01-30 13:31:17 +01:00
Kconfig x86: default to PCI=y 2008-01-30 13:32:32 +01:00
Kconfig.cpu x86: reduce CONFIG_X86_PPRO_FENCE bloat 2008-01-30 13:32:31 +01:00
Kconfig.debug x86: unify arch/x86/kernel/Makefile(s) 2008-01-30 13:32:27 +01:00
Makefile x86: biarch support for 32 bit builds beautified 2008-01-30 13:32:23 +01:00
Makefile_32.cpu x86: move i386 and x86_64 Makefiles to arch/x86 2007-10-25 22:27:34 +02:00