|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v12 2/8] xen: Add support for VMware cpuid leaves
> diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c
> index ed2bd38..651b338 100644
> --- a/tools/libxl/libxl_x86.c
> +++ b/tools/libxl/libxl_x86.c
> @@ -5,8 +5,8 @@ int libxl__arch_domain_prepare_config(libxl__gc *gc,
> libxl_domain_config *d_config,
> xc_domain_configuration_t *xc_config)
> {
> - /* No specific configuration right now */
> -
> + /* Note: will be changed in a later patch */
One usually say which patch. Also missing '.'.
> + xc_config->vmware_hwver = 0;
> return 0;
> }
>
... snip..
> diff --git a/xen/arch/x86/hvm/vmware/cpuid.c b/xen/arch/x86/hvm/vmware/cpuid.c
> new file mode 100644
> index 0000000..0dff36b
> --- /dev/null
> +++ b/xen/arch/x86/hvm/vmware/cpuid.c
> @@ -0,0 +1,77 @@
> +/*
> + * arch/x86/hvm/vmware/cpuid.c
> + *
> + * Copyright (C) 2012 Verizon Corporation
s/2012/2015/ ?
> + *
> + * This file is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU General Public License Version 2 (GPLv2)
> + * as published by the Free Software Foundation.
> + *
> + * This file is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * General Public License for more details. <http://www.gnu.org/licenses/>.
> + */
> +
> +#include <xen/sched.h>
> +
> +#include <asm/hvm/hvm.h>
> +#include <asm/hvm/vmware.h>
> +
> +/*
> + * VMware hardware version 7 defines some of these cpuid levels,
> + * below is a brief description about those.
> + *
> + * Leaf 0x40000000, Hypervisor CPUID information
> + * # EAX: The maximum input value for hypervisor CPUID info (0x40000010).
> + * # EBX, ECX, EDX: Hypervisor vendor ID signature. E.g. "VMwareVMware"
> + *
> + * Leaf 0x40000010, Timing information.
> + * # EAX: (Virtual) TSC frequency in kHz.
> + * # EBX: (Virtual) Bus (local apic timer) frequency in kHz.
> + * # ECX, EDX: RESERVED
> + */
> +
> +int cpuid_vmware_leaves(uint32_t idx, uint32_t *eax, uint32_t *ebx,
> + uint32_t *ecx, uint32_t *edx)
> +{
> + struct domain *d = current->domain;
> +
> + if ( !is_vmware_domain(d) ||
> + d->arch.hvm_domain.vmware_hwver < 7 )
> + return 0;
> +
> + switch ( idx - 0x40000000 )
> + {
> + case 0x0:
> + *eax = 0x40000010; /* Largest leaf */
> + *ebx = 0x61774d56; /* "VMwa" */
> + *ecx = 0x4d566572; /* "reVM" */
> + *edx = 0x65726177; /* "ware" */
> + break;
> +
> + case 0x10:
> + /* (Virtual) TSC frequency in kHz. */
> + *eax = d->arch.tsc_khz;
> + /* (Virtual) Bus (local apic timer) frequency in kHz. */
> + *ebx = 1000000ull / APIC_BUS_CYCLE_NS;
> + *ecx = 0; /* Reserved */
> + *edx = 0; /* Reserved */
> + break;
> +
> + default:
> + return 0;
> + }
> +
> + return 1;
> +}
> +
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * tab-width: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
> diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
> index ac62f20..129be1c 100644
> --- a/xen/arch/x86/traps.c
> +++ b/xen/arch/x86/traps.c
> @@ -750,8 +750,12 @@ int cpuid_hypervisor_leaves( uint32_t idx, uint32_t
> sub_idx,
> uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)
> {
> struct domain *currd = current->domain;
> - /* Optionally shift out of the way of Viridian architectural leaves. */
> - uint32_t base = is_viridian_domain(currd) ? 0x40000100 : 0x40000000;
> + /*
> + * Optionally shift out of the way of Viridian or VMware
> + * architectural leaves.
> + */
> + uint32_t base = is_viridian_domain(currd) || is_vmware_domain(currd) ?
> + 0x40000100 : 0x40000000;
> uint32_t limit, dummy;
>
> idx -= base;
> diff --git a/xen/include/asm-x86/hvm/domain.h
> b/xen/include/asm-x86/hvm/domain.h
> index ad68fcf..ada8aaa 100644
> --- a/xen/include/asm-x86/hvm/domain.h
> +++ b/xen/include/asm-x86/hvm/domain.h
> @@ -110,6 +110,9 @@ struct hvm_domain {
>
> uint64_t *params;
>
> + /* emulated VMware Hardware Version */
> + uint64_t vmware_hwver;
> +
> /* Memory ranges with pinned cache attributes. */
> struct list_head pinned_cacheattr_ranges;
>
> diff --git a/xen/include/asm-x86/hvm/hvm.h b/xen/include/asm-x86/hvm/hvm.h
> index 57f9605..a074afe 100644
> --- a/xen/include/asm-x86/hvm/hvm.h
> +++ b/xen/include/asm-x86/hvm/hvm.h
> @@ -356,6 +356,12 @@ static inline unsigned long
> hvm_get_shadow_gs_base(struct vcpu *v)
> #define has_viridian_time_ref_count(d) \
> (is_viridian_domain(d) && (viridian_feature_mask(d) &
> HVMPV_time_ref_count))
>
> +#define vmware_feature_mask(d) \
> + ((d)->arch.hvm_domain.vmware_hwver)
> +
> +#define is_vmware_domain(d) \
> + (is_hvm_domain(d) && vmware_feature_mask(d))
> +
> void hvm_hypervisor_cpuid_leaf(uint32_t sub_idx,
> uint32_t *eax, uint32_t *ebx,
> uint32_t *ecx, uint32_t *edx);
> diff --git a/xen/include/asm-x86/hvm/vmware.h
> b/xen/include/asm-x86/hvm/vmware.h
> new file mode 100644
> index 0000000..8390173
> --- /dev/null
> +++ b/xen/include/asm-x86/hvm/vmware.h
> @@ -0,0 +1,33 @@
> +/*
> + * asm-x86/hvm/vmware.h
> + *
> + * Copyright (C) 2012 Verizon Corporation
s/2012/2015
> + *
> + * This file is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU General Public License Version 2 (GPLv2)
> + * as published by the Free Software Foundation.
> + *
> + * This file is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * General Public License for more details. <http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef ASM_X86_HVM_VMWARE_H__
> +#define ASM_X86_HVM_VMWARE_H__
> +
> +#include <xen/types.h>
> +
> +int cpuid_vmware_leaves(uint32_t idx, uint32_t *eax, uint32_t *ebx,
> + uint32_t *ecx, uint32_t *edx);
> +
> +#endif /* ASM_X86_HVM_VMWARE_H__ */
> +
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
> diff --git a/xen/include/public/arch-x86/xen.h
> b/xen/include/public/arch-x86/xen.h
> index 2ecc9c9..f84d10d 100644
> --- a/xen/include/public/arch-x86/xen.h
> +++ b/xen/include/public/arch-x86/xen.h
> @@ -268,7 +268,7 @@ typedef struct arch_shared_info arch_shared_info_t;
> * XEN_DOMCTL_INTERFACE_VERSION.
> */
> struct xen_arch_domainconfig {
> - char dummy;
> + uint64_t vmware_hwver;
> };
> #endif
>
> --
> 1.8.3.1
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |