[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 |