Changeset 79458 in vbox
- Timestamp:
- Jul 2, 2019 4:45:02 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r79455 r79458 2565 2565 * VMCS content. HMCPU error-field is 2566 2566 * updated, see VMX_VCI_XXX. 2567 * @param pVCpu The cross context virtual CPU structure. 2568 * @param pVmcsInfo The VMCS info. object. 2569 */ 2570 static int hmR0VmxCheckVmcsCtls(PVMCPU pVCpu, PCVMXVMCSINFO pVmcsInfo) 2571 { 2567 * @param pVCpu The cross context virtual CPU structure. 2568 * @param pVmcsInfo The VMCS info. object. 2569 * @param fIsNstGstVmcs Whether this is a nested-guest VMCS. 2570 */ 2571 static int hmR0VmxCheckVmcsCtls(PVMCPU pVCpu, PCVMXVMCSINFO pVmcsInfo, bool fIsNstGstVmcs) 2572 { 2573 const char * const pcszVmcs = fIsNstGstVmcs ? "Nested-guest VMCS" : "VMCS"; 2574 2572 2575 uint32_t u32Val; 2573 2576 int rc = VMXReadVmcs32(VMX_VMCS32_CTRL_ENTRY, &u32Val); 2574 2577 AssertRCReturn(rc, rc); 2575 2578 AssertMsgReturnStmt(pVmcsInfo->u32EntryCtls == u32Val, 2576 (" Cache=%#RX32 VMCS=%#RX32\n", pVmcsInfo->u32EntryCtls, u32Val),2579 ("%s controls mismatch: Cache=%#RX32 VMCS=%#RX32\n", pcszVmcs, pVmcsInfo->u32EntryCtls, u32Val), 2577 2580 pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_ENTRY, 2578 2581 VERR_VMX_VMCS_FIELD_CACHE_INVALID); … … 2581 2584 AssertRCReturn(rc, rc); 2582 2585 AssertMsgReturnStmt(pVmcsInfo->u32ExitCtls == u32Val, 2583 (" Cache=%#RX32 VMCS=%#RX32\n", pVmcsInfo->u32ExitCtls, u32Val),2586 ("%s controls mismatch: Cache=%#RX32 VMCS=%#RX32\n", pcszVmcs, pVmcsInfo->u32ExitCtls, u32Val), 2584 2587 pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_EXIT, 2585 2588 VERR_VMX_VMCS_FIELD_CACHE_INVALID); … … 2588 2591 AssertRCReturn(rc, rc); 2589 2592 AssertMsgReturnStmt(pVmcsInfo->u32PinCtls == u32Val, 2590 (" Cache=%#RX32 VMCS=%#RX32\n", pVmcsInfo->u32PinCtls, u32Val),2593 ("%s controls mismatch: Cache=%#RX32 VMCS=%#RX32\n", pcszVmcs, pVmcsInfo->u32PinCtls, u32Val), 2591 2594 pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_PIN_EXEC, 2592 2595 VERR_VMX_VMCS_FIELD_CACHE_INVALID); … … 2595 2598 AssertRCReturn(rc, rc); 2596 2599 AssertMsgReturnStmt(pVmcsInfo->u32ProcCtls == u32Val, 2597 (" Cache=%#RX32 VMCS=%#RX32\n", pVmcsInfo->u32ProcCtls, u32Val),2600 ("%s controls mismatch: Cache=%#RX32 VMCS=%#RX32\n", pcszVmcs, pVmcsInfo->u32ProcCtls, u32Val), 2598 2601 pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_PROC_EXEC, 2599 2602 VERR_VMX_VMCS_FIELD_CACHE_INVALID); … … 2604 2607 AssertRCReturn(rc, rc); 2605 2608 AssertMsgReturnStmt(pVmcsInfo->u32ProcCtls2 == u32Val, 2606 (" Cache=%#RX32 VMCS=%#RX32\n", pVmcsInfo->u32ProcCtls2, u32Val),2609 ("%s controls mismatch: Cache=%#RX32 VMCS=%#RX32\n", pcszVmcs, pVmcsInfo->u32ProcCtls2, u32Val), 2607 2610 pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_PROC_EXEC2, 2608 2611 VERR_VMX_VMCS_FIELD_CACHE_INVALID); … … 2612 2615 AssertRCReturn(rc, rc); 2613 2616 AssertMsgReturnStmt(pVmcsInfo->u32XcptBitmap == u32Val, 2614 (" Cache=%#RX32 VMCS=%#RX32\n", pVmcsInfo->u32XcptBitmap, u32Val),2617 ("%s exception bitmap mismatch: Cache=%#RX32 VMCS=%#RX32\n", pcszVmcs, pVmcsInfo->u32XcptBitmap, u32Val), 2615 2618 pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_XCPT_BITMAP, 2616 2619 VERR_VMX_VMCS_FIELD_CACHE_INVALID); … … 2620 2623 AssertRCReturn(rc, rc); 2621 2624 AssertMsgReturnStmt(pVmcsInfo->u64TscOffset == u64Val, 2622 (" Cache=%#RX64 VMCS=%#RX64\n", pVmcsInfo->u64TscOffset, u64Val),2625 ("%s TSC offset mismatch: Cache=%#RX64 VMCS=%#RX64\n", pcszVmcs, pVmcsInfo->u64TscOffset, u64Val), 2623 2626 pVCpu->hm.s.u32HMError = VMX_VCI_CTRL_TSC_OFFSET, 2624 2627 VERR_VMX_VMCS_FIELD_CACHE_INVALID); … … 11722 11725 hmR0VmxCheckAutoLoadStoreMsrs(pVCpu, pVmcsInfo, pVmxTransient->fIsNestedGuest); 11723 11726 hmR0VmxCheckHostEferMsr(pVCpu, pVmcsInfo); 11724 AssertRC(hmR0VmxCheckVmcsCtls(pVCpu, pVmcsInfo ));11727 AssertRC(hmR0VmxCheckVmcsCtls(pVCpu, pVmcsInfo, pVmxTransient->fIsNestedGuest)); 11725 11728 #endif 11726 11729 … … 14649 14652 AssertRCReturn(rc, rc); 14650 14653 14651 rc = hmR0VmxCheckVmcsCtls(pVCpu, pVmcsInfo );14654 rc = hmR0VmxCheckVmcsCtls(pVCpu, pVmcsInfo, pVmxTransient->fIsNestedGuest); 14652 14655 if (RT_FAILURE(rc)) 14653 14656 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.