Changeset 74603 in vbox for trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
- Timestamp:
- Oct 4, 2018 6:07:20 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r74545 r74603 78 78 #define HMVMX_READ_EXIT_INTERRUPTION_ERROR_CODE RT_BIT_32(5) 79 79 #define HMVMX_READ_EXIT_INSTR_INFO RT_BIT_32(6) 80 #define HMVMX_READ_GUEST_LINEAR_ADDR RT_BIT_32(7) 80 81 /** @} */ 81 82 … … 263 264 /** The VM-exit exit code qualification. */ 264 265 uint64_t uExitQual; 266 /** The Guest-linear address. */ 267 uint64_t uGuestLinearAddr; 265 268 266 269 /** The VM-exit interruption-information field. */ … … 724 727 725 728 /** 726 * Reads the exit code qualification from the VMCS into the VMX transient 727 * structure. 729 * Reads the VM-exit Qualification from the VMCS into the VMX transient structure. 728 730 * 729 731 * @returns VBox status code. … … 739 741 AssertRCReturn(rc, rc); 740 742 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_EXIT_QUALIFICATION; 743 } 744 return VINF_SUCCESS; 745 } 746 747 748 /** 749 * Reads the Guest-linear address from the VMCS into the VMX transient structure. 750 * 751 * @returns VBox status code. 752 * @param pVCpu The cross context virtual CPU structure of the 753 * calling EMT. (Required for the VMCS cache case.) 754 * @param pVmxTransient Pointer to the VMX transient structure. 755 */ 756 DECLINLINE(int) hmR0VmxReadGuestLinearAddrVmcs(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 757 { 758 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_READ_GUEST_LINEAR_ADDR)) 759 { 760 int rc = VMXReadVmcsGstN(VMX_VMCS_RO_GUEST_LINEAR_ADDR, &pVmxTransient->uGuestLinearAddr); NOREF(pVCpu); 761 AssertRCReturn(rc, rc); 762 pVmxTransient->fVmcsFieldsRead |= HMVMX_READ_GUEST_LINEAR_ADDR; 741 763 } 742 764 return VINF_SUCCESS; … … 12282 12304 { 12283 12305 /* Note! LMSW cannot clear CR0.PE, so no fRealOnV86Active kludge needed here. */ 12284 rcStrict = IEMExecDecodedLmsw(pVCpu, pVmxTransient->cbInstr, VMX_EXIT_QUAL_CRX_LMSW_DATA(uExitQual)); 12306 rc = hmR0VmxReadGuestLinearAddrVmcs(pVCpu, pVmxTransient); 12307 AssertRCReturn(rc, rc); 12308 rcStrict = IEMExecDecodedLmsw(pVCpu, pVmxTransient->cbInstr, VMX_EXIT_QUAL_CRX_LMSW_DATA(uExitQual), 12309 pVmxTransient->uGuestLinearAddr); 12285 12310 AssertMsg( rcStrict == VINF_SUCCESS 12286 12311 || rcStrict == VINF_IEM_RAISED_XCPT
Note:
See TracChangeset
for help on using the changeset viewer.