- Timestamp:
- Jul 2, 2021 2:26:30 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 145478
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r89993 r90000 14157 14157 */ 14158 14158 STAM_REL_COUNTER_INC(&pVCpu->hm.s.StatExitGuestACSplitLock); 14159 PVM pVM = pVCpu->pVMR0;14159 PVMCC pVM = pVCpu->pVMR0; 14160 14160 if ( !DBGF_IS_EVENT_ENABLED(pVM, DBGFEVENT_VMX_SPLIT_LOCK) 14161 14161 && !VBOXVMM_VMX_SPLIT_LOCK_ENABLED()) 14162 14162 { 14163 if (pVM->cCpus == 1) 14164 { 14163 14165 #if 0 /** @todo r=bird: This is potentially wrong. Might have to just do a whole state sync above and mark everything changed to be safe... */ 14164 rc = hmR0VmxImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK);14166 rc = hmR0VmxImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, IEM_CPUMCTX_EXTRN_MUST_MASK); 14165 14167 #else 14166 rc = hmR0VmxImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, HMVMX_CPUMCTX_EXTRN_ALL);14168 rc = hmR0VmxImportGuestState(pVCpu, pVmxTransient->pVmcsInfo, HMVMX_CPUMCTX_EXTRN_ALL); 14167 14169 #endif 14168 AssertRCReturn(rc, rc); 14170 AssertRCReturn(rc, rc); 14171 } 14169 14172 } 14170 14173 else … … 14189 14192 * detection on the host. This isn't all that satisfactory, though... 14190 14193 */ 14191 #if 0 14192 Log8Func(("cs:rip=%#04x:%#RX64 rflags=%#RX64 cr0=%#RX64 split-lock #AC\n", pVCpu->cpum.GstCtx.cs.Sel, 14193 pVCpu->cpum.GstCtx.rip, pVCpu->cpum.GstCtx.rflags, pVCpu->cpum.GstCtx.cr0)); 14194 14195 /** @todo For SMP configs we should do a rendezvous here. */ 14196 VBOXSTRICTRC rcStrict = IEMExecOneIgnoreLock(pVCpu); 14197 if (rcStrict == VINF_SUCCESS) 14194 if (pVM->cCpus == 1) 14195 { 14196 Log8Func(("cs:rip=%#04x:%#RX64 rflags=%#RX64 cr0=%#RX64 split-lock #AC\n", pVCpu->cpum.GstCtx.cs.Sel, 14197 pVCpu->cpum.GstCtx.rip, pVCpu->cpum.GstCtx.rflags, pVCpu->cpum.GstCtx.cr0)); 14198 14199 /** @todo For SMP configs we should do a rendezvous here. */ 14200 VBOXSTRICTRC rcStrict = IEMExecOneIgnoreLock(pVCpu); 14201 if (rcStrict == VINF_SUCCESS) 14198 14202 #if 0 /** @todo r=bird: This is potentially wrong. Might have to just do a whole state sync above and mark everything changed to be safe... */ 14199 ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged,14200 HM_CHANGED_GUEST_RIP14201 | HM_CHANGED_GUEST_RFLAGS14202 | HM_CHANGED_GUEST_GPRS_MASK14203 | HM_CHANGED_GUEST_CS14204 | HM_CHANGED_GUEST_SS);14203 ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, 14204 HM_CHANGED_GUEST_RIP 14205 | HM_CHANGED_GUEST_RFLAGS 14206 | HM_CHANGED_GUEST_GPRS_MASK 14207 | HM_CHANGED_GUEST_CS 14208 | HM_CHANGED_GUEST_SS); 14205 14209 #else 14206 ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_ALL_GUEST);14210 ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_ALL_GUEST); 14207 14211 #endif 14208 else if (rcStrict == VINF_IEM_RAISED_XCPT)14209 {14210 ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_RAISED_XCPT_MASK);14211 rcStrict = VINF_SUCCESS;14212 }14213 return rcStrict;14214 #else 14212 else if (rcStrict == VINF_IEM_RAISED_XCPT) 14213 { 14214 ASMAtomicUoOrU64(&pVCpu->hm.s.fCtxChanged, HM_CHANGED_RAISED_XCPT_MASK); 14215 rcStrict = VINF_SUCCESS; 14216 } 14217 return rcStrict; 14218 } 14215 14219 Log8Func(("cs:rip=%#04x:%#RX64 rflags=%#RX64 cr0=%#RX64 split-lock #AC -> VINF_EM_EMULATE_SPLIT_LOCK\n", 14216 14220 pVCpu->cpum.GstCtx.cs.Sel, pVCpu->cpum.GstCtx.rip, pVCpu->cpum.GstCtx.rflags, pVCpu->cpum.GstCtx.cr0)); 14217 14221 return VINF_EM_EMULATE_SPLIT_LOCK; 14218 #endif14219 14222 } 14220 14223
Note:
See TracChangeset
for help on using the changeset viewer.