Changeset 71834 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h
- Timestamp:
- Apr 12, 2018 7:21:00 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h
r71092 r71834 4457 4457 IEMOP_MNEMONIC(pause, "pause"); 4458 4458 #ifdef VBOX_WITH_NESTED_HWVIRT 4459 /** @todo Pause filter count and threshold with SVM nested hardware virt. */ 4460 Assert(!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSvmPauseFilter); 4461 Assert(!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSvmPauseFilterThreshold); 4459 bool fCheckIntercept = true; 4460 if (IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSvmPauseFilter) 4461 { 4462 /* TSC based pause-filter thresholding. */ 4463 PCPUMCTX pCtx = IEM_GET_CTX(pVCpu); 4464 if ( IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSvmPauseFilterThreshold 4465 && pCtx->hwvirt.svm.cPauseFilterThreshold > 0) 4466 { 4467 uint64_t const uTick = TMCpuTickGet(pVCpu); 4468 if (uTick - pCtx->hwvirt.svm.uPrevPauseTick > pCtx->hwvirt.svm.cPauseFilterThreshold) 4469 pCtx->hwvirt.svm.cPauseFilter = IEM_GET_SVM_PAUSE_FILTER_COUNT(pVCpu); 4470 pCtx->hwvirt.svm.uPrevPauseTick = uTick; 4471 } 4472 4473 /* Simple pause-filter counter. */ 4474 if (pCtx->hwvirt.svm.cPauseFilter > 0) 4475 { 4476 --pCtx->hwvirt.svm.cPauseFilter; 4477 fCheckIntercept = false; 4478 } 4479 } 4480 if (fCheckIntercept) 4481 IEMOP_HLP_SVM_INSTR_INTERCEPT_AND_NRIP(pVCpu, SVM_CTRL_INTERCEPT_PAUSE, SVM_EXIT_PAUSE, 0, 0); 4462 4482 #endif 4463 IEMOP_HLP_SVM_INSTR_INTERCEPT_AND_NRIP(pVCpu, SVM_CTRL_INTERCEPT_PAUSE, SVM_EXIT_PAUSE, 0, 0);4464 4483 } 4465 4484 else
Note:
See TracChangeset
for help on using the changeset viewer.