- Timestamp:
- Nov 18, 2013 12:26:58 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 90701
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r49523 r49526 674 674 * 675 675 * @returns VBox status code. 676 * @param pVCpu Pointer to the VMCPU (required for the VMCS cache 677 * case). 676 678 * @param pVmxTransient Pointer to the VMX transient structure. 677 679 */ 678 DECLINLINE(int) hmR0VmxReadExitQualificationVmcs(PVM XTRANSIENT pVmxTransient)680 DECLINLINE(int) hmR0VmxReadExitQualificationVmcs(PVMCPU pVCpu, PVMXTRANSIENT pVmxTransient) 679 681 { 680 682 if (!(pVmxTransient->fVmcsFieldsRead & HMVMX_UPDATED_TRANSIENT_EXIT_QUALIFICATION)) 681 683 { 682 int rc = VMXReadVmcsGstN(VMX_VMCS_RO_EXIT_QUALIFICATION, &pVmxTransient->uExitQualification); 684 int rc = VMXReadVmcsGstN(VMX_VMCS_RO_EXIT_QUALIFICATION, &pVmxTransient->uExitQualification); NOREF(pVCpu); 683 685 AssertRCReturn(rc, rc); 684 686 pVmxTransient->fVmcsFieldsRead |= HMVMX_UPDATED_TRANSIENT_EXIT_QUALIFICATION; … … 4540 4542 int rc = VMXReadVmcs32(VMX_VMCS32_RO_EXIT_REASON, &pVCpu->hm.s.vmx.LastError.u32ExitReason); 4541 4543 rc |= VMXReadVmcs32(VMX_VMCS32_RO_VM_INSTR_ERROR, &pVCpu->hm.s.vmx.LastError.u32InstrError); 4542 rc |= hmR0VmxReadExitQualificationVmcs(pV mxTransient);4544 rc |= hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient); 4543 4545 AssertRC(rc); 4544 4546 … … 9363 9365 Assert(!pVM->hm.s.fNestedPaging); 9364 9366 9365 int rc = hmR0VmxReadExitQualificationVmcs(pV mxTransient);9367 int rc = hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient); 9366 9368 rc |= hmR0VmxSaveGuestControlRegs(pVCpu, pMixedCtx); 9367 9369 AssertRCReturn(rc, rc); … … 9917 9919 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(); 9918 9920 STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExitMovCRx, y2); 9919 int rc = hmR0VmxReadExitQualificationVmcs(pV mxTransient);9921 int rc = hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient); 9920 9922 AssertRCReturn(rc, rc); 9921 9923 … … 10050 10052 STAM_PROFILE_ADV_START(&pVCpu->hm.s.StatExitIO, y1); 10051 10053 10052 int rc2 = hmR0VmxReadExitQualificationVmcs(pV mxTransient);10054 int rc2 = hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient); 10053 10055 rc2 |= hmR0VmxReadExitInstrLenVmcs(pVmxTransient); 10054 10056 rc2 |= hmR0VmxSaveGuestRip(pVCpu, pMixedCtx); … … 10271 10273 10272 10274 /* Check if this task-switch occurred while delivery an event through the guest IDT. */ 10273 int rc = hmR0VmxReadExitQualificationVmcs(pV mxTransient);10275 int rc = hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient); 10274 10276 AssertRCReturn(rc, rc); 10275 10277 if (VMX_EXIT_QUALIFICATION_TASK_SWITCH_TYPE(pVmxTransient->uExitQualification) == VMX_EXIT_QUALIFICATION_TASK_SWITCH_TYPE_IDT) … … 10356 10358 rc |= hmR0VmxSaveGuestSegmentRegs(pVCpu, pMixedCtx); 10357 10359 #endif 10358 rc |= hmR0VmxReadExitQualificationVmcs(pV mxTransient);10360 rc |= hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient); 10359 10361 AssertRCReturn(rc, rc); 10360 10362 … … 10454 10456 10455 10457 #ifdef VBOX_WITH_STATISTICS 10456 rc = hmR0VmxReadExitQualificationVmcs(pV mxTransient);10458 rc = hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient); 10457 10459 AssertRCReturn(rc, rc); 10458 10460 if (VMX_EXIT_QUALIFICATION_DRX_DIRECTION(pVmxTransient->uExitQualification) == VMX_EXIT_QUALIFICATION_DRX_DIRECTION_WRITE) … … 10469 10471 * hmR0VmxSaveGuestAutoLoadStoreMsrs(). Update the segment registers and DR7 from the CPU. 10470 10472 */ 10471 rc = hmR0VmxReadExitQualificationVmcs(pV mxTransient);10473 rc = hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient); 10472 10474 rc |= hmR0VmxSaveGuestSegmentRegs(pVCpu, pMixedCtx); 10473 10475 rc |= hmR0VmxSaveGuestDR7(pVCpu, pMixedCtx); … … 10576 10578 RTGCPHYS GCPhys = 0; 10577 10579 rc = VMXReadVmcs64(VMX_VMCS64_EXIT_GUEST_PHYS_ADDR_FULL, &GCPhys); 10578 rc |= hmR0VmxReadExitQualificationVmcs(pV mxTransient);10580 rc |= hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient); 10579 10581 #if 0 10580 10582 rc |= hmR0VmxSaveGuestState(pVCpu, pMixedCtx); /** @todo Can we do better? */ … … 10703 10705 * for processing. 10704 10706 */ 10705 int rc = hmR0VmxReadExitQualificationVmcs(pV mxTransient);10707 int rc = hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient); 10706 10708 AssertRCReturn(rc, rc); 10707 10709 … … 11103 11105 HMVMX_VALIDATE_EXIT_XCPT_HANDLER_PARAMS(); 11104 11106 PVM pVM = pVCpu->CTX_SUFF(pVM); 11105 int rc = hmR0VmxReadExitQualificationVmcs(pV mxTransient);11107 int rc = hmR0VmxReadExitQualificationVmcs(pVCpu, pVmxTransient); 11106 11108 rc |= hmR0VmxReadExitIntInfoVmcs(pVmxTransient); 11107 11109 rc |= hmR0VmxReadExitIntErrorCodeVmcs(pVmxTransient);
Note:
See TracChangeset
for help on using the changeset viewer.