diff --git a/hypervisor/arch/x86/guest/vcpu.c b/hypervisor/arch/x86/guest/vcpu.c index ea6d0f49a..c0f34d9b8 100644 --- a/hypervisor/arch/x86/guest/vcpu.c +++ b/hypervisor/arch/x86/guest/vcpu.c @@ -532,6 +532,10 @@ int32_t run_vcpu(struct acrn_vcpu *vcpu) */ flush_vpid_global(); + /* Set XCR0 and XSS to default value */ + write_xcr(0, XCR0_DEFAULT); + msr_write(MSR_IA32_XSS, XSS_DEFAULT); + /* Set vcpu launched */ vcpu->launched = true; diff --git a/hypervisor/include/arch/x86/cpu.h b/hypervisor/include/arch/x86/cpu.h index 76959113e..fcf6d8b45 100644 --- a/hypervisor/include/arch/x86/cpu.h +++ b/hypervisor/include/arch/x86/cpu.h @@ -85,6 +85,8 @@ #define CR4_SMAP (1UL<<21U) #define CR4_PKE (1UL<<22U) /* Protect-key-enable */ +/* XCR0_FPU */ +#define XCR0_FPU (1UL<<0U) /* XCR0_SSE */ #define XCR0_SSE (1UL<<1U) /* XCR0_AVX */ @@ -100,6 +102,8 @@ */ #define XCR0_RESERVED_BITS ((~((1UL << 10U) - 1UL)) | (1UL << 8U)) +#define XCR0_DEFAULT (XCR0_FPU) +#define XSS_DEFAULT (0U) /* * Entries in the Interrupt Descriptor Table (IDT)