linux/arch/x86/kernel
Alok Kataria 88b094fb8d x86: Hypervisor detection and get tsc_freq from hypervisor
Impact: Changes timebase calibration on Vmware.

v3->v2 : Abstract the hypervisor detection and feature (tsc_freq) request
	 behind a hypervisor.c file
v2->v1 : Add a x86_hyper_vendor field to the cpuinfo_x86 structure.
	 This avoids multiple calls to the hypervisor detection function.

This patch adds function to detect if we are running under VMware.
The current way to check if we are on VMware is following,
#  check if "hypervisor present bit" is set, if so read the 0x40000000
   cpuid leaf and check for "VMwareVMware" signature.
#  if the above fails, check the DMI vendors name for "VMware" string
   if we find one we query the VMware hypervisor port to check if we are
   under VMware.

The DMI + "VMware hypervisor port check" is needed for older VMware products,
which don't implement the hypervisor signature cpuid leaf.
Also note that since we are checking for the DMI signature the hypervisor
port should never be accessed on native hardware.

This patch also adds a hypervisor_get_tsc_freq function, instead of
calibrating the frequency which can be error prone in virtualized
environment, we ask the hypervisor for it. We get the frequency from
the hypervisor by accessing the hypervisor port if we are running on VMware.
Other hypervisors too can add code to the generic routine to get frequency on
their platform.

Signed-off-by: Alok N Kataria <akataria@vmware.com>
Signed-off-by: Dan Hecht <dhecht@vmware.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2008-11-01 18:57:08 -07:00
..
acpi Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2008-10-23 12:38:39 -07:00
cpu x86: Hypervisor detection and get tsc_freq from hypervisor 2008-11-01 18:57:08 -07:00
.gitignore arch/x86/kernel/.gitignore: Added vmlinux.lds to .gitignore file because it shouldn't be tracked. 2008-07-10 10:13:51 -07:00
alternative.c x86: improve UP kernel when CPU-hotplug and SMP is enabled 2008-10-13 10:33:46 +02:00
amd_iommu_init.c amd_iommu: fix nasty bug that caused ILLEGAL_DEVICE_TABLE_ENTRY errors 2008-10-18 14:29:30 +01:00
amd_iommu.c x86, AMD IOMMU: convert driver to generic iommu_num_pages function 2008-10-16 11:21:33 -07:00
aperture_64.c x86, debug printouts: IOMMU setup failures should not be KERN_ERR 2008-09-30 10:25:28 +02:00
apic.c x86: apic - unify APIC_DIVISOR 2008-10-16 16:53:14 +02:00
apm_32.c Merge branches 'x86/alternatives', 'x86/cleanups', 'x86/commandline', 'x86/crashdump', 'x86/debug', 'x86/defconfig', 'x86/doc', 'x86/exports', 'x86/fpu', 'x86/gart', 'x86/idle', 'x86/mm', 'x86/mtrr', 'x86/nmi-watchdog', 'x86/oprofile', 'x86/paravirt', 'x86/reboot', 'x86/sparse-fixes', 'x86/tsc', 'x86/urgent' and 'x86/vmalloc' into x86-v28-for-linus-phase1 2008-10-06 18:17:07 +02:00
asm-offsets_32.c x86/paravirt: split sysret and sysexit 2008-07-08 13:13:15 +02:00
asm-offsets_64.c x86: Fix ASM_X86__ header guards 2008-10-22 22:55:23 -07:00
asm-offsets.c
audit_64.c
bios_uv.c x86: Add UV partition call v4 2008-10-16 16:53:13 +02:00
bootflag.c
cpuid.c device create: misc: convert device_create_drvdata to device_create 2008-10-16 09:24:43 -07:00
crash_dump_32.c kdump: make elfcorehdr_addr independent of CONFIG_PROC_VMCORE 2008-10-20 08:52:39 -07:00
crash_dump_64.c kdump: make elfcorehdr_addr independent of CONFIG_PROC_VMCORE 2008-10-20 08:52:39 -07:00
crash.c
doublefault_32.c x86: fix virt_addr_valid() with CONFIG_DEBUG_VIRTUAL=y, v2 2008-10-13 10:33:15 +02:00
ds.c x86: ds.c ptrace.c integer as NULL pointer sparse fixes 2008-09-24 09:57:47 +02:00
dumpstack_32.c x86, kexec: fix hang on i386 when panic occurs while console_sem is held 2008-10-22 13:59:44 +02:00
dumpstack_64.c sysfs: crash debugging 2008-10-16 09:24:41 -07:00
e820.c Merge branches 'core/softlockup', 'core/softirq', 'core/resources', 'core/printk' and 'core/misc' into core-v28-for-linus 2008-10-15 12:48:44 +02:00
early_printk.c warnings: fix arch/x86/kernel/early_printk.c 2008-10-12 15:19:36 +02:00
early-quirks.c x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC 2008-10-22 12:00:10 +02:00
efi_32.c x86: fix i486 suspend to disk CR4 oops 2008-08-18 08:50:19 +02:00
efi_64.c x86: add flags parameter to reserve_bootmem_generic() 2008-07-08 11:49:49 +02:00
efi_stub_32.S
efi_stub_64.S
efi.c x86: Add UV EFI table entry v4 2008-10-16 16:53:13 +02:00
entry_32.S Merge commit 'v2.6.28-rc2' into tracing/urgent 2008-10-27 10:50:54 +01:00
entry_64.S ftrace: rename FTRACE to FUNCTION_TRACER 2008-10-20 18:27:03 +02:00
es7000_32.c x86: check dsdt before find oem table for es7000, v2 2008-10-13 10:21:07 +02:00
ftrace.c ftrace: use a real variable for ftrace_nop in x86 2008-10-27 16:52:01 +01:00
genapic_64.c GRU Driver: export is_uv_system(), zap_page_range() & follow_page() 2008-07-30 09:41:48 -07:00
genapic_flat_64.c x86: fix section mismatch warning - apic_physflat 2008-10-22 17:36:27 +02:00
genx2apic_cluster.c x86: fix section mismatch warning - apic_x2apic_cluster 2008-10-22 17:36:29 +02:00
genx2apic_phys.c x86: fix section mismatch warning - apic_x2apic_phys 2008-10-22 17:36:30 +02:00
genx2apic_uv_x.c x86/uv: memory allocation at initialization 2008-10-27 14:17:16 +01:00
geode_32.c x86, geode: add a VSA2 ID for General Software 2008-06-19 14:19:03 +02:00
head32.c
head64.c x86_64: be less annoying on boot, v2 2008-09-29 10:04:53 +02:00
head_32.S x86, cpa: rename PTE attribute macros for kernel direct mapping in early boot 2008-10-10 19:29:11 +02:00
head_64.S x86, cpa: rename PTE attribute macros for kernel direct mapping in early boot 2008-10-10 19:29:11 +02:00
head.c x86: print out EBDA/lowmem address 2008-10-13 10:21:10 +02:00
hpet.c hpet: clean up warning 2008-10-16 16:53:12 +02:00
i386_ksyms_32.c ftrace: rename FTRACE to FUNCTION_TRACER 2008-10-20 18:27:03 +02:00
i387.c x86: xsave: set FP, SSE bits in the xsave header in the user sigcontext 2008-10-07 14:36:08 -07:00
i8237.c
i8253.c
i8259.c x64, x2apic/intr-remap: 8259 specific mask/unmask routines 2008-07-12 08:44:55 +02:00
init_task.c
io_apic.c io_apic: make irq_mis_count available on 64-bit too 2008-10-16 16:59:20 +02:00
io_delay.c x86: add io delay quirk for Presario F700 2008-09-03 16:42:51 -07:00
ioport.c x86: Introducing asm/syscalls.h 2008-07-22 14:35:57 +02:00
ipi.c X86_SMP: ipi.c declare functions before they get used 2008-07-25 11:57:46 +05:30
irq_32.c x86: move ack_bad_irq() to irq.c 2008-10-16 16:53:30 +02:00
irq_64.c x86: move ack_bad_irq() to irq.c 2008-10-16 16:53:30 +02:00
irq.c genirq: fix off by one and coding style 2008-10-21 15:54:40 +02:00
irqinit_32.c genirq: remove artifacts from sparseirq removal 2008-10-16 16:53:15 +02:00
irqinit_64.c genirq: remove irq_to_desc_alloc 2008-10-16 16:53:15 +02:00
k8.c x86, gart: fix gart detection for Fam11h CPUs 2008-10-28 17:10:27 +01:00
kdebugfs.c arch/x86/kernel/kdebugfs.c: introduce missing kfree 2008-09-10 14:03:49 +02:00
kgdb.c kgdb, x86: Avoid invoking kgdb_nmicallback twice per NMI 2008-10-06 13:50:59 -05:00
kprobes.c kprobes: improve kretprobe scalability with hashed locking 2008-07-25 10:53:30 -07:00
kvm.c x86, paravirt_ops: use unsigned long instead of u32 for alloc_p*() pfn args 2008-08-22 05:34:44 +02:00
kvmclock.c x86: KVM guest: use paravirt function to calculate cpu khz 2008-10-15 10:15:17 +02:00
ldt.c Merge branch 'linus' into x86/xen 2008-10-12 12:37:32 +02:00
machine_kexec_32.c x86, kdump: fix invalid access on i386 sparsemem 2008-10-28 16:48:24 +01:00
machine_kexec_64.c kexec jump 2008-07-26 12:00:04 -07:00
Makefile ftrace, powerpc, sparc64, x86: remove notrace from arch ftrace file 2008-10-23 16:00:25 +02:00
mca_32.c
mfgpt_32.c x86, geode-mfgpt: check IRQ before using MFGPT as clocksource 2008-08-15 17:12:32 +02:00
microcode_amd.c x86: AMD microcode patch loader author update 2008-10-28 16:41:28 +01:00
microcode_core.c x86: microcode patch loader author update 2008-10-28 16:41:16 +01:00
microcode_intel.c x86: moved microcode.c to microcode_intel.c 2008-09-23 12:21:42 +02:00
mmconf-fam10h_64.c x86: mmconf: fix section mismatch warning 2008-08-18 07:49:06 +02:00
module_32.c
module_64.c PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
mpparse.c Merge branch 'x86/apic' into x86-v28-for-linus-phase4-B 2008-10-11 20:17:36 +02:00
msr.c device create: misc: convert device_create_drvdata to device_create 2008-10-16 09:24:43 -07:00
nmi.c x86, NMI watchdog: setup before enabling NMI watchdog 2008-09-22 19:48:19 +02:00
numaq_32.c Merge branch 'x86/apic' into x86-v28-for-linus-phase4-B 2008-10-11 20:17:36 +02:00
olpc.c x86, olpc: fix endian bug in openfirmware workaround 2008-09-24 10:29:04 +02:00
paravirt_patch_32.c x86: coding style fixes to arch/x86/kernel/paravirt_patch_32.c 2008-08-15 16:53:25 +02:00
paravirt_patch_64.c x86/paravirt: add sysret/sysexit pvops for returning to 32-bit compatibility userspace 2008-07-08 13:15:52 +02:00
paravirt-spinlocks.c x86: export pv_lock_ops non-GPL 2008-08-22 15:43:17 +02:00
paravirt.c Merge branch 'linus' into x86/xen 2008-10-12 12:37:32 +02:00
pci-calgary_64.c x86: convert Calgary IOMMU driver to generic iommu_num_pages function 2008-10-16 11:21:33 -07:00
pci-dma.c x86/PCI: build failure at x86/kernel/pci-dma.c with !CONFIG_PCI 2008-10-24 11:09:43 -07:00
pci-gart_64.c x86, gart: fix gart detection for Fam11h CPUs 2008-10-28 17:10:27 +01:00
pci-nommu.c x86: export pci-nommu's alloc_coherent 2008-09-25 11:02:25 +02:00
pci-swiotlb_64.c x86: restore the old swiotlb alloc_coherent behavior 2008-10-23 21:54:40 +02:00
pcspeaker.c x86: use platform_device_register_simple() 2008-09-22 12:58:36 +02:00
pmtimer_64.c
probe_roms_32.c x86: seperate probe_roms into another file 2008-07-08 12:50:05 +02:00
process_32.c x86: __show_registers() and __show_regs() API unification 2008-10-13 10:33:04 +02:00
process_64.c Merge branch 'linus' into test 2008-10-23 00:11:07 -04:00
process.c Merge branch 'x86/unify-cpu-detect' into x86-v28-for-linus-phase4-D 2008-10-11 20:23:20 +02:00
ptrace.c Merge branches 'x86/xen', 'x86/build', 'x86/microcode', 'x86/mm-debug-v2', 'x86/memory-corruption-check', 'x86/early-printk', 'x86/xsave', 'x86/ptrace-v2', 'x86/quirks', 'x86/setup', 'x86/spinlocks' and 'x86/signal' into x86/core-v2 2008-10-12 15:50:02 +02:00
pvclock.c x86: pvclock: fix shadowed variable warning 2008-10-15 14:25:14 +02:00
quirks.c x86: remove irqbalance in kernel for 32 bit 2008-10-16 16:52:52 +02:00
reboot_fixups_32.c
reboot.c x86: default to reboot via ACPI 2008-08-25 12:31:32 +02:00
relocate_kernel_32.S kexec jump: check code size in control page 2008-08-15 08:35:42 -07:00
relocate_kernel_64.S
rtc.c rtc: use bcd2bin/bin2bcd 2008-10-20 08:52:41 -07:00
scx200_32.c
setup_percpu.c x86: remove redundant KERN_DEBUG on pr_debug 2008-10-22 16:56:22 +02:00
setup.c x86: Hypervisor detection and get tsc_freq from hypervisor 2008-11-01 18:57:08 -07:00
sigframe.h Merge branch 'x86/unify-cpu-detect' into x86-v28-for-linus-phase4-D 2008-10-11 20:23:20 +02:00
signal_32.c Merge branch 'x86/unify-cpu-detect' into x86-v28-for-linus-phase4-D 2008-10-11 20:23:20 +02:00
signal_64.c Merge branch 'x86/unify-cpu-detect' into x86-v28-for-linus-phase4-D 2008-10-11 20:23:20 +02:00
smp.c x86: add cpu hotplug hooks into smp_ops 2008-08-25 10:59:18 +02:00
smpboot.c x86: do_boot_cpu - check if we have ESR register 2008-10-22 16:56:16 +02:00
smpcommon.c x86: change init_gdt to update the gdt via write_gdt, rather than a direct write. 2008-08-15 19:16:05 +02:00
stacktrace.c stacktrace: fix modular build, export print_stack_trace and save_stack_trace 2008-06-30 09:20:55 +02:00
step.c x86 ptrace: user-sets-TF nits 2008-07-16 12:15:17 -07:00
summit_32.c x86: mach_summit to summit 2008-07-26 16:31:35 +02:00
sys_i386_32.c x86: Introducing asm/syscalls.h 2008-07-22 14:35:57 +02:00
sys_x86_64.c Merge branches 'x86/alternatives', 'x86/cleanups', 'x86/commandline', 'x86/crashdump', 'x86/debug', 'x86/defconfig', 'x86/doc', 'x86/exports', 'x86/fpu', 'x86/gart', 'x86/idle', 'x86/mm', 'x86/mtrr', 'x86/nmi-watchdog', 'x86/oprofile', 'x86/paravirt', 'x86/reboot', 'x86/sparse-fixes', 'x86/tsc', 'x86/urgent' and 'x86/vmalloc' into x86-v28-for-linus-phase1 2008-10-06 18:17:07 +02:00
syscall_64.c x86: Fix ASM_X86__ header guards 2008-10-22 22:55:23 -07:00
syscall_table_32.S flag parameters add-on: remove epoll_create size param 2008-07-24 10:47:29 -07:00
tce_64.c
test_nx.c
test_rodata.c
time_32.c x86: wrap MCA_bus test around an ifdef 2008-10-13 10:21:47 +02:00
time_64.c x86: move vgetcpu mode probing to cpu detection 2008-10-13 10:21:49 +02:00
tlb_32.c x86: build fix for !CONFIG_SMP 2008-09-05 17:44:08 +02:00
tlb_64.c Merge branch 'generic-ipi' into generic-ipi-for-linus 2008-07-15 21:55:59 +02:00
tlb_uv.c x86/tlb_uv: remove strange mc146818rtc include 2008-10-22 16:56:23 +02:00
tls.c x86: Introducing asm/syscalls.h 2008-07-22 14:35:57 +02:00
tls.h
topology.c
trampoline_32.S
trampoline_64.S
trampoline.c
traps.c MCE: Don't run 32bit machine checks with interrupts on 2008-10-22 13:19:01 +02:00
tsc_sync.c x86: use WARN() in arch/x86/kernel 2008-08-21 10:01:52 +02:00
tsc.c x86: Hypervisor detection and get tsc_freq from hypervisor 2008-11-01 18:57:08 -07:00
uv_irq.c x86, UV: add uv_setup_irq() and uv_teardown_irq() functions, v3, fix 2008-10-16 16:53:13 +02:00
uv_sysfs.c x86: Add sysfs entries for UV v4 2008-10-16 16:53:13 +02:00
verify_cpu_64.S
visws_quirks.c genirq: revert dynarray 2008-10-16 16:53:15 +02:00
vm86_32.c x86: Introducing asm/syscalls.h 2008-07-22 14:35:57 +02:00
vmi_32.c Merge branch 'x86/apic' into x86-v28-for-linus-phase4-B 2008-10-11 20:17:36 +02:00
vmiclock_32.c x86: VMI, initialize IRQ vector 2008-10-16 16:52:59 +02:00
vmlinux_32.lds.S genirq: revert dynarray 2008-10-16 16:53:15 +02:00
vmlinux_64.lds.S genirq: remove artifacts from sparseirq removal 2008-10-16 16:53:15 +02:00
vmlinux.lds.S
vsmp_64.c x86: two trivial sparse annotations 2008-10-29 08:02:28 +01:00
vsyscall_64.c Merge branch 'generic-ipi' into generic-ipi-for-linus 2008-07-15 21:55:59 +02:00
x8664_ksyms_64.c ftrace: rename FTRACE to FUNCTION_TRACER 2008-10-20 18:27:03 +02:00
xsave.c x86: make variables static 2008-10-22 07:31:28 +02:00