Fix guest XD enabling issue in test FRM.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
Jiewen Yao 2016-12-14 10:51:43 +08:00
parent 957328a129
commit 6ddc89f7e7
3 changed files with 7 additions and 2 deletions

View File

@ -112,6 +112,7 @@ SetVmcsControlField (
if (PinBasedCtls.Bits.VmxPreemptionTimer) {
VmExitCtrls.Bits.SaveVmxPreemptionTimerValue = 1;
}
VmExitCtrls.Bits.SaveIA32_EFER = 1;
Data64 = AsmReadMsr64 (IA32_VMX_ENTRY_CTLS_MSR_INDEX);
VmEntryCtrls.Uint32 = (UINT32)Data64 & (UINT32)RShiftU64 (Data64, 32);
@ -235,9 +236,11 @@ SetVmcsGuestField (
VmWrite64 (VMCS_64_GUEST_VMCS_LINK_PTR_INDEX, 0xffffffffffffffff);
if ((mGuestContextCommon.GuestContextPerCpu[mBspIndex].Cr0 & CR0_PG) == 0) {
ASSERT(mGuestContextCommon.GuestContextPerCpu[Index].UnrestrictedGuest);
// do not assert here, because it will be assigned later.
//ASSERT(mGuestContextCommon.GuestContextPerCpu[Index].UnrestrictedGuest);
VmWriteN(VMCS_N_GUEST_CR0_INDEX, VmReadN(VMCS_N_GUEST_CR0_INDEX) & (~CR0_PG));
}
VmWrite64 (VMCS_64_GUEST_IA32_EFER_INDEX, mGuestContextCommon.GuestContextPerCpu[Index].EFER);
return ;
}

View File

@ -178,6 +178,8 @@ SetVmcsGuestApWakeupField (
VmWriteN (VMCS_N_CONTROL_CR0_READ_SHADOW_INDEX, mGuestContextCommon.GuestContextPerCpu[Index].Cr0);
VmWriteN (VMCS_N_CONTROL_CR4_READ_SHADOW_INDEX, mGuestContextCommon.GuestContextPerCpu[Index].Cr4 & ~CR4_VMXE & ~CR4_SMXE);
VmWrite64 (VMCS_64_GUEST_IA32_EFER_INDEX, mGuestContextCommon.GuestContextPerCpu[Index].EFER);
ZeroMem (&mGuestContextCommon.GuestContextPerCpu[Index].Register, sizeof(X86_REGISTER));
AsmCpuidEx (
CPUID_FEATURE_INFORMATION,

View File

@ -32,7 +32,7 @@ ReadMsrHandler (
MsrIndex = (UINT32)mGuestContextCommon.GuestContextPerCpu[Index].Register.Rcx;
switch (MsrIndex) {
case IA32_EFER_MSR_INDEX:
Data64 = mGuestContextCommon.GuestContextPerCpu[Index].EFER;
Data64 = VmRead64 (VMCS_64_GUEST_IA32_EFER_INDEX);
break;
case IA32_SYSENTER_CS_MSR_INDEX: