Changeset 80056 in vbox
- Timestamp:
- Jul 30, 2019 6:17:13 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 132493
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/vm.h
r80024 r80056 626 626 /** High priority ring-0 VMCPU pre HM-mode execution mask. */ 627 627 #define VMCPU_FF_HP_R0_PRE_HM_MASK ( VMCPU_FF_HM_TO_R3_MASK | VMCPU_FF_PGM_SYNC_CR3 \ 628 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL | VMCPU_FF_REQUEST) 628 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL | VMCPU_FF_REQUEST \ 629 | VMCPU_FF_VMX_APIC_WRITE | VMCPU_FF_VMX_MTF | VMCPU_FF_VMX_PREEMPT_TIMER) 629 630 /** High priority ring-0 VM pre HM-mode execution mask, single stepping. */ 630 631 #define VM_FF_HP_R0_PRE_HM_STEP_MASK (VM_FF_HP_R0_PRE_HM_MASK & ~( VM_FF_TM_VIRTUAL_SYNC | VM_FF_PDM_QUEUES \ -
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r80052 r80056 8183 8183 * @param fStepping Whether we are single-stepping the guest using the 8184 8184 * hypervisor debugger. 8185 * 8186 * @remarks This might cause nested-guest VM-exits, caller must check if the guest 8187 * is no longer in VMX non-root mode. 8185 8188 */ 8186 8189 static VBOXSTRICTRC hmR0VmxCheckForceFlags(PVMCPU pVCpu, bool fStepping) … … 8210 8213 PCPUMCTX pCtx = &pVCpu->cpum.GstCtx; 8211 8214 Assert(!(ASMAtomicUoReadU64(&pCtx->fExtrn) & (CPUMCTX_EXTRN_CR0 | CPUMCTX_EXTRN_CR3 | CPUMCTX_EXTRN_CR4))); 8212 VBOXSTRICTRC rcStrict 2= PGMSyncCR3(pVCpu, pCtx->cr0, pCtx->cr3, pCtx->cr4,8213 8214 if (rcStrict 2!= VINF_SUCCESS)8215 { 8216 AssertRC(VBOXSTRICTRC_VAL(rcStrict 2));8217 Log4Func(("PGMSyncCR3 forcing us back to ring-3. rc2=%d\n", VBOXSTRICTRC_VAL(rcStrict 2)));8218 return rcStrict 2;8215 VBOXSTRICTRC rcStrict = PGMSyncCR3(pVCpu, pCtx->cr0, pCtx->cr3, pCtx->cr4, 8216 VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_PGM_SYNC_CR3)); 8217 if (rcStrict != VINF_SUCCESS) 8218 { 8219 AssertRC(VBOXSTRICTRC_VAL(rcStrict)); 8220 Log4Func(("PGMSyncCR3 forcing us back to ring-3. rc2=%d\n", VBOXSTRICTRC_VAL(rcStrict))); 8221 return rcStrict; 8219 8222 } 8220 8223 } … … 8225 8228 { 8226 8229 STAM_COUNTER_INC(&pVCpu->hm.s.StatSwitchHmToR3FF); 8227 int rc 2= RT_LIKELY(!VM_FF_IS_SET(pVM, VM_FF_PGM_NO_MEMORY)) ? VINF_EM_RAW_TO_R3 : VINF_EM_NO_MEMORY;8228 Log4Func(("HM_TO_R3 forcing us back to ring-3. rc=%d\n", rc 2));8229 return rc 2;8230 int rc = RT_LIKELY(!VM_FF_IS_SET(pVM, VM_FF_PGM_NO_MEMORY)) ? VINF_EM_RAW_TO_R3 : VINF_EM_NO_MEMORY; 8231 Log4Func(("HM_TO_R3 forcing us back to ring-3. rc=%d\n", rc)); 8232 return rc; 8230 8233 } 8231 8234 … … 8254 8257 return VINF_EM_RAW_TO_R3; 8255 8258 } 8259 8260 /* Pending nested-guest APIC-write (has highest priority among nested-guest FFs). */ 8261 if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE)) 8262 { 8263 Log4Func(("Pending nested-guest APIC-write\n")); 8264 VBOXSTRICTRC rcStrict = IEMExecVmxVmexitApicWrite(pVCpu); 8265 Assert(rcStrict != VINF_VMX_INTERCEPT_NOT_ACTIVE); 8266 return rcStrict; 8267 } 8268 /** @todo VMCPU_FF_VMX_MTF, VMCPU_FF_VMX_PREEMPT_TIMER */ 8256 8269 8257 8270 return VINF_SUCCESS; … … 10800 10813 VBOXSTRICTRC rcStrict = hmR0VmxCheckForceFlags(pVCpu, fStepping); 10801 10814 if (rcStrict == VINF_SUCCESS) 10802 { /* FFs don't get set all the time. */ } 10815 { 10816 /* FFs don't get set all the time. */ 10817 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX 10818 if ( pVmxTransient->fIsNestedGuest 10819 && !CPUMIsGuestInVmxNonRootMode(&pVCpu->cpum.GstCtx)) 10820 { 10821 STAM_COUNTER_INC(&pVCpu->hm.s.StatSwitchNstGstVmexit); 10822 return VINF_VMX_VMEXIT; 10823 } 10824 #endif 10825 } 10803 10826 else 10804 10827 return rcStrict;
Note:
See TracChangeset
for help on using the changeset viewer.