Changeset 96745 in vbox
- Timestamp:
- Sep 15, 2022 11:35:07 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 153632
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r96744 r96745 9687 9687 * problematic because of the setjmp/longjmp clobbering above. 9688 9688 */ 9689 if ( rcStrict == VINF_SUCCESS 9690 && VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE | VMCPU_FF_VMX_MTF | VMCPU_FF_VMX_PREEMPT_TIMER 9691 | VMCPU_FF_VMX_INT_WINDOW | VMCPU_FF_VMX_NMI_WINDOW)) 9689 if ( !VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE | VMCPU_FF_VMX_MTF | VMCPU_FF_VMX_PREEMPT_TIMER 9690 | VMCPU_FF_VMX_INT_WINDOW | VMCPU_FF_VMX_NMI_WINDOW) 9691 || rcStrict != VINF_SUCCESS) 9692 { /* likely */ } 9693 else 9692 9694 rcStrict = iemHandleNestedInstructionBoundaryFFs(pVCpu, rcStrict); 9693 9695 #endif … … 9724 9726 pVCpu->iem.s.cInstructions++; 9725 9727 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX 9726 if (VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE | VMCPU_FF_VMX_MTF | VMCPU_FF_VMX_PREEMPT_TIMER 9727 | VMCPU_FF_VMX_INT_WINDOW | VMCPU_FF_VMX_NMI_WINDOW)) 9728 if (!VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE | VMCPU_FF_VMX_MTF | VMCPU_FF_VMX_PREEMPT_TIMER 9729 | VMCPU_FF_VMX_INT_WINDOW | VMCPU_FF_VMX_NMI_WINDOW)) 9730 { /* likely */ } 9731 else 9728 9732 rcStrict = iemHandleNestedInstructionBoundaryFFs(pVCpu, rcStrict); 9729 9733 #endif … … 10056 10060 Assert(pVCpu->iem.s.cActiveMappings == 0); 10057 10061 pVCpu->iem.s.cInstructions++; 10062 10058 10063 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX 10059 10064 /* Perform any VMX nested-guest instruction boundary actions. */ 10060 if (VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE | VMCPU_FF_VMX_MTF | VMCPU_FF_VMX_PREEMPT_TIMER 10061 | VMCPU_FF_VMX_INT_WINDOW | VMCPU_FF_VMX_NMI_WINDOW)) 10065 uint64_t fCpu = pVCpu->fLocalForcedActions; 10066 if (!(fCpu & ( VMCPU_FF_VMX_APIC_WRITE | VMCPU_FF_VMX_MTF | VMCPU_FF_VMX_PREEMPT_TIMER 10067 | VMCPU_FF_VMX_INT_WINDOW | VMCPU_FF_VMX_NMI_WINDOW))) 10068 { /* likely */ } 10069 else 10070 { 10062 10071 rcStrict = iemHandleNestedInstructionBoundaryFFs(pVCpu, rcStrict); 10072 if (RT_LIKELY(rcStrict == VINF_SUCCESS)) 10073 fCpu = pVCpu->fLocalForcedActions; 10074 else 10075 { 10076 rcStrict = iemExecStatusCodeFiddling(pVCpu, rcStrict); 10077 break; 10078 } 10079 } 10063 10080 #endif 10064 if ( RT_LIKELY(rcStrict == VINF_SUCCESS) 10065 && RT_LIKELY(pVCpu->iem.s.rcPassUp == VINF_SUCCESS)) 10081 if (RT_LIKELY(pVCpu->iem.s.rcPassUp == VINF_SUCCESS)) 10066 10082 { 10067 uint64_t fCpu = pVCpu->fLocalForcedActions 10068 & ( VMCPU_FF_ALL_MASK & ~( VMCPU_FF_PGM_SYNC_CR3 10069 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL 10070 | VMCPU_FF_TLB_FLUSH 10071 | VMCPU_FF_INHIBIT_INTERRUPTS 10072 | VMCPU_FF_BLOCK_NMIS 10073 | VMCPU_FF_UNHALT )); 10083 #ifndef VBOX_WITH_NESTED_HWVIRT_VMX 10084 uint64_t fCpu = pVCpu->fLocalForcedActions; 10085 #endif 10086 fCpu &= VMCPU_FF_ALL_MASK & ~( VMCPU_FF_PGM_SYNC_CR3 10087 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL 10088 | VMCPU_FF_TLB_FLUSH 10089 | VMCPU_FF_INHIBIT_INTERRUPTS 10090 | VMCPU_FF_BLOCK_NMIS 10091 | VMCPU_FF_UNHALT ); 10074 10092 10075 10093 if (RT_LIKELY( ( !fCpu … … 10094 10112 } 10095 10113 else if (pVCpu->iem.s.cActiveMappings > 0) 10096 10114 iemMemRollback(pVCpu); 10097 10115 rcStrict = iemExecStatusCodeFiddling(pVCpu, rcStrict); 10098 10116 break; … … 10224 10242 pStats->cInstructions++; 10225 10243 cInstructionSinceLastExit++; 10244 10226 10245 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX 10227 10246 /* Perform any VMX nested-guest instruction boundary actions. */ 10228 if (VMCPU_FF_IS_ANY_SET(pVCpu, VMCPU_FF_VMX_APIC_WRITE | VMCPU_FF_VMX_MTF | VMCPU_FF_VMX_PREEMPT_TIMER 10229 | VMCPU_FF_VMX_INT_WINDOW | VMCPU_FF_VMX_NMI_WINDOW)) 10247 uint64_t fCpu = pVCpu->fLocalForcedActions; 10248 if (!(fCpu & ( VMCPU_FF_VMX_APIC_WRITE | VMCPU_FF_VMX_MTF | VMCPU_FF_VMX_PREEMPT_TIMER 10249 | VMCPU_FF_VMX_INT_WINDOW | VMCPU_FF_VMX_NMI_WINDOW))) 10250 { /* likely */ } 10251 else 10252 { 10230 10253 rcStrict = iemHandleNestedInstructionBoundaryFFs(pVCpu, rcStrict); 10254 if (RT_LIKELY(rcStrict == VINF_SUCCESS)) 10255 fCpu = pVCpu->fLocalForcedActions; 10256 else 10257 { 10258 rcStrict = iemExecStatusCodeFiddling(pVCpu, rcStrict); 10259 break; 10260 } 10261 } 10231 10262 #endif 10232 if ( RT_LIKELY(rcStrict == VINF_SUCCESS) 10233 && RT_LIKELY(pVCpu->iem.s.rcPassUp == VINF_SUCCESS)) 10263 if (RT_LIKELY(pVCpu->iem.s.rcPassUp == VINF_SUCCESS)) 10234 10264 { 10235 uint64_t fCpu = pVCpu->fLocalForcedActions 10236 & ( VMCPU_FF_ALL_MASK & ~( VMCPU_FF_PGM_SYNC_CR3 10237 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL 10238 | VMCPU_FF_TLB_FLUSH 10239 | VMCPU_FF_INHIBIT_INTERRUPTS 10240 | VMCPU_FF_BLOCK_NMIS 10241 | VMCPU_FF_UNHALT )); 10242 10265 #ifndef VBOX_WITH_NESTED_HWVIRT_VMX 10266 uint64_t fCpu = pVCpu->fLocalForcedActions; 10267 #endif 10268 fCpu &= VMCPU_FF_ALL_MASK & ~( VMCPU_FF_PGM_SYNC_CR3 10269 | VMCPU_FF_PGM_SYNC_CR3_NON_GLOBAL 10270 | VMCPU_FF_TLB_FLUSH 10271 | VMCPU_FF_INHIBIT_INTERRUPTS 10272 | VMCPU_FF_BLOCK_NMIS 10273 | VMCPU_FF_UNHALT ); 10243 10274 if (RT_LIKELY( ( ( !fCpu 10244 10275 || ( !(fCpu & ~(VMCPU_FF_INTERRUPT_APIC | VMCPU_FF_INTERRUPT_PIC))
Note:
See TracChangeset
for help on using the changeset viewer.