Changeset 81238 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Oct 14, 2019 6:51:37 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r81237 r81238 9239 9239 && (u64GuestCr0 & X86_CR0_PG) 9240 9240 && !(u64GuestCr0 & X86_CR0_PE)) 9241 {9242 9241 HMVMX_ERROR_BREAK(VMX_IGS_CR0_PG_PE_COMBO); 9243 }9244 9242 9245 9243 /* … … 9284 9282 if ( !fLongModeGuest 9285 9283 || !pCtx->cs.Attr.n.u1Long) 9286 {9287 9284 HMVMX_CHECK_BREAK(!(u64Val & UINT64_C(0xffffffff00000000)), VMX_IGS_LONGMODE_RIP_INVALID); 9288 }9289 9285 /** @todo If the processor supports N < 64 linear-address bits, bits 63:N 9290 9286 * must be identical if the "IA-32e mode guest" VM-entry … … 9324 9320 if ( !fLongModeGuest 9325 9321 && (u64GuestCr4 & X86_CR4_PCIDE)) 9326 {9327 9322 HMVMX_ERROR_BREAK(VMX_IGS_CR4_PCIDE); 9328 }9329 9323 9330 9324 /** @todo CR3 field must be such that bits 63:52 and bits in the range … … 9333 9327 if ( (pVmcsInfo->u32EntryCtls & VMX_ENTRY_CTLS_LOAD_DEBUG) 9334 9328 && (pCtx->dr[7] & X86_DR7_MBZ_MASK)) 9335 {9336 9329 HMVMX_ERROR_BREAK(VMX_IGS_DR7_RESERVED); 9337 }9338 9330 9339 9331 rc = VMXReadVmcsNw(VMX_VMCS_HOST_SYSENTER_ESP, &u64Val); … … 9373 9365 && u8Val != 6 /* WB */ 9374 9366 && u8Val != 7 /* UC- */) 9375 {9376 9367 HMVMX_ERROR_BREAK(VMX_IGS_PAT_MSR_INVALID); 9377 }9378 9368 u64Val >>= 8; 9379 9369 } … … 9434 9424 if ( !(pCtx->cr0 & X86_CR0_PE) 9435 9425 || pCtx->cs.Attr.n.u4Type == 3) 9436 {9437 9426 HMVMX_CHECK_BREAK(!pCtx->ss.Attr.n.u2Dpl, VMX_IGS_SS_ATTR_DPL_INVALID); 9438 } 9427 9439 9428 if (!(pCtx->ss.Attr.u & X86DESCATTR_UNUSABLE)) 9440 9429 { … … 9589 9578 HMVMX_CHECK_BREAK(X86_IS_CANONICAL(pCtx->tr.u64Base), VMX_IGS_TR_BASE_NOT_CANONICAL); 9590 9579 if (fLongModeGuest) 9591 {9592 9580 HMVMX_CHECK_BREAK(pCtx->tr.Attr.n.u4Type == 11, /* 64-bit busy TSS. */ 9593 9581 VMX_IGS_LONGMODE_TR_ATTR_TYPE_INVALID); 9594 }9595 9582 else 9596 {9597 9583 HMVMX_CHECK_BREAK( pCtx->tr.Attr.n.u4Type == 3 /* 16-bit busy TSS. */ 9598 9584 || pCtx->tr.Attr.n.u4Type == 11, /* 32-bit busy TSS.*/ 9599 9585 VMX_IGS_TR_ATTR_TYPE_INVALID); 9600 }9601 9586 HMVMX_CHECK_BREAK(!pCtx->tr.Attr.n.u1DescType, VMX_IGS_TR_ATTR_S_INVALID); 9602 9587 HMVMX_CHECK_BREAK(pCtx->tr.Attr.n.u1Present, VMX_IGS_TR_ATTR_P_INVALID); … … 9644 9629 if ( u32IntrState == VMX_VMCS_GUEST_INT_STATE_BLOCK_MOVSS 9645 9630 || u32IntrState == VMX_VMCS_GUEST_INT_STATE_BLOCK_STI) 9646 {9647 9631 HMVMX_CHECK_BREAK(u32ActivityState == VMX_VMCS_GUEST_ACTIVITY_ACTIVE, VMX_IGS_ACTIVITY_STATE_ACTIVE_INVALID); 9648 }9649 9632 9650 9633 /** @todo Activity state and injecting interrupts. Left as a todo since we … … 9683 9666 if ( (pVmcsInfo->u32PinCtls & VMX_PIN_CTLS_VIRT_NMI) 9684 9667 && VMX_ENTRY_INT_INFO_IS_XCPT_NMI(u32EntryInfo)) 9685 { 9686 HMVMX_CHECK_BREAK(!(u32IntrState & VMX_VMCS_GUEST_INT_STATE_BLOCK_NMI), 9687 VMX_IGS_INTERRUPTIBILITY_STATE_NMI_INVALID); 9688 } 9668 HMVMX_CHECK_BREAK(!(u32IntrState & VMX_VMCS_GUEST_INT_STATE_BLOCK_NMI), VMX_IGS_INTERRUPTIBILITY_STATE_NMI_INVALID); 9689 9669 9690 9670 /* Pending debug exceptions. */
Note:
See TracChangeset
for help on using the changeset viewer.