Changeset 97055 in vbox
- Timestamp:
- Oct 7, 2022 11:12:54 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 154004
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/VMXAllTemplate.cpp.h
r97054 r97055 10329 10329 Assert(pVCpu->CTX_SUFF(pVM)->hmr0.s.fNestedPaging); 10330 10330 10331 //# define DSL_IRQ_FIX_110332 # define DSL_IRQ_FIX_210333 10334 10331 PVMXVMCSINFO pVmcsInfo = pVmxTransient->pVmcsInfo; 10335 10332 if (CPUMIsGuestVmxProcCtls2Set(&pVCpu->cpum.GstCtx, VMX_PROC_CTLS2_EPT)) … … 10338 10335 AssertRCReturn(rc, rc); 10339 10336 10340 # ifdef DSL_IRQ_FIX_210341 10337 vmxHCReadToTransient< HMVMX_READ_EXIT_QUALIFICATION 10342 10338 | HMVMX_READ_EXIT_INSTR_LEN … … 10361 10357 } 10362 10358 bool const fClearEventOnForward = VCPU_2_VMXSTATE(pVCpu).Event.fPending; /* paranoia. should not inject events below. */ 10363 # else10364 vmxHCReadExitQualVmcs(pVCpu, pVmxTransient);10365 vmxHCReadGuestPhysicalAddrVmcs(pVCpu, pVmxTransient);10366 VBOXSTRICTRC rcStrict;10367 # endif10368 10359 10369 10360 RTGCPHYS const GCPhysNestedFault = pVmxTransient->uGuestPhysicalAddr; … … 10394 10385 uExitQual, GCPhysNestedFault, GCPtrNestedFault, VBOXSTRICTRC_VAL(rcStrict), Walk.fFailed)); 10395 10386 if (RT_SUCCESS(rcStrict)) 10396 {10397 # ifdef DSL_IRQ_FIX_110398 /*10399 * If it's our VMEXIT, we're responsible for re-injecting any event which delivery10400 * might have triggered this VMEXIT. If we forward the problem to the inner VMM,10401 * it's its problem to deal with that issue. This means that it's troublesome to10402 * call vmxHCCheckExitDueToEventDelivery before PGMR0NestedTrap0eHandlerNestedPaging10403 * have decided who's VMEXIT it is. Unfortunately, we're a bit of a pickle then if10404 * we end up with an informational status here, as we _must_ _not_ drop events either.10405 */10406 /** @todo need better solution for this. Better solution should probably be10407 * applied to other exits too... */10408 if (rcStrict == VINF_SUCCESS)10409 {10410 vmxHCReadExitIntInfoVmcs(pVCpu, pVmxTransient);10411 vmxHCReadExitIntErrorCodeVmcs(pVCpu, pVmxTransient);10412 vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient);10413 vmxHCReadIdtVectoringInfoVmcs(pVCpu, pVmxTransient);10414 vmxHCReadIdtVectoringErrorCodeVmcs(pVCpu, pVmxTransient);10415 10416 vmxHCCheckExitDueToEventDelivery(pVCpu, pVmxTransient);10417 }10418 # endif10419 10387 return rcStrict; 10420 } 10421 10422 # ifndef DSL_IRQ_FIX_2 10423 vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient); 10424 vmxHCReadIdtVectoringInfoVmcs(pVCpu, pVmxTransient); 10425 vmxHCReadIdtVectoringErrorCodeVmcs(pVCpu, pVmxTransient); 10426 # else 10388 10427 10389 if (fClearEventOnForward) 10428 10390 VCPU_2_VMXSTATE(pVCpu).Event.fPending = false; 10429 # endif10430 10391 10431 10392 VMXVEXITEVENTINFO const ExitEventInfo = VMXVEXITEVENTINFO_INIT_ONLY_IDT(pVmxTransient->uIdtVectoringInfo,
Note:
See TracChangeset
for help on using the changeset viewer.