[hv] set ECX.bit31 to indicate the presence of a hypervisor
ECS.bit31 is not used and always return 0 in SDM Vol.2A 3-195. It's a standard way to indicate whether there is a hypervisor. Tracked-On: #2490 Ref: https://lwn.net/Articles/301888/ Signed-off-by: Xinyun Liu <xinyun.liu@intel.com> Acked-by: Anthony Xu <anthony.xu@intel.com>
This commit is contained in:
parent
f6758fd621
commit
0943a836bd
|
@ -345,6 +345,9 @@ void guest_cpuid(struct acrn_vcpu *vcpu, uint32_t *eax, uint32_t *ebx, uint32_t
|
||||||
/*mask vmx to guest os */
|
/*mask vmx to guest os */
|
||||||
*ecx &= ~CPUID_ECX_VMX;
|
*ecx &= ~CPUID_ECX_VMX;
|
||||||
|
|
||||||
|
/* set Hypervisor Present Bit */
|
||||||
|
*ecx |= CPUID_ECX_HV;
|
||||||
|
|
||||||
/*no xsave support for guest if it is not enabled on host*/
|
/*no xsave support for guest if it is not enabled on host*/
|
||||||
if ((*ecx & CPUID_ECX_OSXSAVE) == 0U) {
|
if ((*ecx & CPUID_ECX_OSXSAVE) == 0U) {
|
||||||
*ecx &= ~CPUID_ECX_XSAVE;
|
*ecx &= ~CPUID_ECX_XSAVE;
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#define CPUID_ECX_XSAVE (1U<<26U)
|
#define CPUID_ECX_XSAVE (1U<<26U)
|
||||||
#define CPUID_ECX_OSXSAVE (1U<<27U)
|
#define CPUID_ECX_OSXSAVE (1U<<27U)
|
||||||
#define CPUID_ECX_AVX (1U<<28U)
|
#define CPUID_ECX_AVX (1U<<28U)
|
||||||
|
#define CPUID_ECX_HV (1U<<31U)
|
||||||
#define CPUID_EDX_FPU (1U<<0U)
|
#define CPUID_EDX_FPU (1U<<0U)
|
||||||
#define CPUID_EDX_VME (1U<<1U)
|
#define CPUID_EDX_VME (1U<<1U)
|
||||||
#define CPUID_EDX_DE (1U<<2U)
|
#define CPUID_EDX_DE (1U<<2U)
|
||||||
|
|
Loading…
Reference in New Issue