lkml.org 
[lkml]   [2008]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    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)


    \
     
     \ /
      Last update: 2008-09-24 14:49    [W:0.026 / U:34.376 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site