Messages in this thread Patch in this message | | | Date | Wed, 24 Sep 2008 20:22:10 +0800 | From | Yan Li <> | Subject | [PATCH 1/2] VMware guest detection for x86 and x86-64 |
| |
Detects whether we are running as a VMware guest or not. Detection is based upon DMI vendor string.
It provides a function: int is_vmware_guest(void) that can be used easily to detect if we are running as a VMware guest or not.
I haven't used PCI vendor Id since that requires copying a trunk of codes from early_quirks() and I think copying code is not good. And reusing codes from early_quirks() needs intrivial change to present codes structure. Comparatively, checking "VMware" string against DMI manufacturer is a lot more simpler (one-line code). Also there's no evidence indicating that VMware will change their vendor string in near future. Therefore I choose to use simpler way.
Tested on x86 and x86-64 VMs and machines.
Signed-off-by: Yan Li <elliot.li.tech@gmail.com> --- arch/x86/Kconfig | 10 ++++++++++ arch/x86/kernel/Makefile | 1 + arch/x86/kernel/vmware.c | 23 +++++++++++++++++++++++ include/asm-x86/vmware.h | 20 ++++++++++++++++++++ 4 files changed, 54 insertions(+), 0 deletions(-) create mode 100644 arch/x86/kernel/vmware.c create mode 100644 include/asm-x86/vmware.h
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index ed92864..85dfebd 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -445,6 +445,16 @@ config PARAVIRT_DEBUG Enable to debug paravirt_ops internals. Specifically, BUG if a paravirt_op is missing when it is called. +config VMWARE_GUEST_DETECT + bool "VMware guest detection support" + default y + depends on DMI && !X86_VOYAGER + help + This enables detection of running as a full-virtualized + VMware guest (as under VMware Workstation or VMware + Server). Currently this is used to suppress false warnings + from initialization. + config MEMTEST bool "Memtest" help diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index 3db651f..a3a16a8 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -87,6 +87,7 @@ obj-$(CONFIG_DEBUG_RODATA_TEST) += test_rodata.o obj-$(CONFIG_DEBUG_NX_TEST) += test_nx.o obj-$(CONFIG_VMI) += vmi_32.o vmiclock_32.o +obj-$(CONFIG_VMWARE_GUEST_DETECT) += vmware.o obj-$(CONFIG_KVM_GUEST) += kvm.o obj-$(CONFIG_KVM_CLOCK) += kvmclock.o obj-$(CONFIG_PARAVIRT) += paravirt.o paravirt_patch_$(BITS).o diff --git a/arch/x86/kernel/vmware.c b/arch/x86/kernel/vmware.c new file mode 100644 index 0000000..352d5d8 --- /dev/null +++ b/arch/x86/kernel/vmware.c @@ -0,0 +1,23 @@ +/* + * Check if we are running as a VMware guest or not + * + * Copyright (C) 2008 Yan Li <elliot.li.tech@gmail.com> + * + */ + +#include <linux/dmi.h> +#include <linux/kernel.h> +#include <asm/vmware.h> + +/* + * detect whether we are running as a VMware guest or not. this + * function depends on DMI so it should not be used early before + * dmi_scan_machine() in setup_arch() + */ +int is_vmware_guest(void) +{ + if (!dmi_available) + return 0; + else + return dmi_name_in_vendors("VMware"); +} diff --git a/include/asm-x86/vmware.h b/include/asm-x86/vmware.h new file mode 100644 index 0000000..554f0f9 --- /dev/null +++ b/include/asm-x86/vmware.h @@ -0,0 +1,20 @@ +/* + * Check if we are running as a VMware guest or not + * + * Copyright (C) 2008 Yan Li <elliot.li.tech@gmail.com> + * + */ + +#ifndef _ASM_X86_VMWARE_H +#define _ASM_X86_VMWARE_H + +/* + * is_vmware_guest - return non-zero if running as a VMware guest + */ +#ifdef CONFIG_VMWARE_GUEST_DETECT +extern int is_vmware_guest(void); +#else +int is_vmware_guest(void) { return 0; } +#endif /* CONFIG_VMWARE_GUEST_DETECT */ + +#endif /* _ASM_X86_VMWARE_H */ -- 1.5.4.3
-- Li, Yan
"Everything that is really great and inspiring is created by the individual who can labor in freedom." - Albert Einstein, in Out of My Later Years (1950)
| |