Changeset 72642 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Jun 21, 2018 3:41:14 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 123148
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r72636 r72642 438 438 } 439 439 440 #ifndef IN_RC 440 441 441 442 /** … … 601 602 PEMEXITENTRY pHistEntry, uint64_t uExitNo) 602 603 { 604 # ifdef IN_RING0 605 /* Disregard the preempt disabled flag. */ 606 uFlagsAndType &= ~EMEXIT_F_PREEMPT_DISABLED; 607 # endif 608 603 609 /* 604 610 * Work the hash table. 605 611 */ 606 612 AssertCompile(RT_ELEMENTS(pVCpu->em.s.aExitRecords) == 1024); 607 # define EM_EXIT_RECORDS_IDX_MASK 0x3ff613 # define EM_EXIT_RECORDS_IDX_MASK 0x3ff 608 614 uintptr_t idxSlot = ((uintptr_t)uFlatPC >> 1) & EM_EXIT_RECORDS_IDX_MASK; 609 615 PEMEXITREC pExitRec = &pVCpu->em.s.aExitRecords[idxSlot]; … … 733 739 } 734 740 741 #endif /* !IN_RC */ 735 742 736 743 /** … … 761 768 pHistEntry->idxSlot = UINT32_MAX; 762 769 770 #ifndef IN_RC 763 771 /* 764 772 * If common exit type, we will insert/update the exit into the exit record hash table. 765 773 */ 766 774 if ( (uFlagsAndType & (EMEXIT_F_KIND_MASK | EMEXIT_F_CS_EIP | EMEXIT_F_UNFLATTENED_PC)) == EMEXIT_F_KIND_EM 775 # ifdef IN_RING0 776 && pVCpu->em.s.fExitOptimizationEnabledR0 777 && ( !(uFlagsAndType & EMEXIT_F_PREEMPT_DISABLED) || pVCpu->em.s.fExitOptimizationEnabledR0PreemptDisabled) 778 # else 767 779 && pVCpu->em.s.fExitOptimizationEnabled 768 && uFlatPC != UINT64_MAX) 780 # endif 781 && uFlatPC != UINT64_MAX 782 ) 769 783 return emHistoryAddOrUpdateRecord(pVCpu, uFlagsAndType, uFlatPC, pHistEntry, uExitNo); 784 #endif 770 785 return NULL; 771 786 } … … 842 857 pHistEntry->uFlagsAndType = uFlagsAndType | (pHistEntry->uFlagsAndType & (EMEXIT_F_CS_EIP | EMEXIT_F_UNFLATTENED_PC)); 843 858 859 #ifndef IN_RC 844 860 /* 845 861 * If common exit type, we will insert/update the exit into the exit record hash table. 846 862 */ 847 863 if ( (uFlagsAndType & (EMEXIT_F_KIND_MASK | EMEXIT_F_CS_EIP | EMEXIT_F_UNFLATTENED_PC)) == EMEXIT_F_KIND_EM 864 # ifdef IN_RING0 865 && pVCpu->em.s.fExitOptimizationEnabledR0 866 && ( !(uFlagsAndType & EMEXIT_F_PREEMPT_DISABLED) || pVCpu->em.s.fExitOptimizationEnabledR0PreemptDisabled) 867 # else 848 868 && pVCpu->em.s.fExitOptimizationEnabled 849 && pHistEntry->uFlatPC != UINT64_MAX) 869 # endif 870 && pHistEntry->uFlatPC != UINT64_MAX 871 ) 850 872 return emHistoryAddOrUpdateRecord(pVCpu, uFlagsAndType, pHistEntry->uFlatPC, pHistEntry, uExitNo); 873 #endif 851 874 return NULL; 852 875 } … … 879 902 pHistEntry->uFlatPC = uFlatPC; 880 903 904 #ifndef IN_RC 881 905 /* 882 906 * If common exit type, we will insert/update the exit into the exit record hash table. 883 907 */ 884 908 if ( (uFlagsAndType & (EMEXIT_F_KIND_MASK | EMEXIT_F_CS_EIP | EMEXIT_F_UNFLATTENED_PC)) == EMEXIT_F_KIND_EM 885 && pVCpu->em.s.fExitOptimizationEnabled) 909 # ifdef IN_RING0 910 && pVCpu->em.s.fExitOptimizationEnabledR0 911 && ( !(uFlagsAndType & EMEXIT_F_PREEMPT_DISABLED) || pVCpu->em.s.fExitOptimizationEnabledR0PreemptDisabled) 912 # else 913 && pVCpu->em.s.fExitOptimizationEnabled 914 # endif 915 ) 886 916 return emHistoryAddOrUpdateRecord(pVCpu, uFlagsAndType, uFlatPC, pHistEntry, uExitNo); 917 #endif 887 918 return NULL; 888 919 } -
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r72607 r72642 14193 14193 #endif 14194 14194 { 14195 uint32_t cInstructionSinceLastExit = 0; 14195 #ifdef IN_RING0 14196 bool const fCheckPreemptionPending = !RTThreadPreemptIsPossible() || !RTThreadPreemptIsEnabled(NIL_RTTHREAD); 14197 #endif 14198 uint32_t cInstructionSinceLastExit = 0; 14196 14199 14197 14200 /* … … 14258 14261 { 14259 14262 #ifdef IN_RING0 14260 if (!RTThreadPreemptIsPending(NIL_RTTHREAD)) 14263 if ( !fCheckPreemptionPending 14264 || !RTThreadPreemptIsPending(NIL_RTTHREAD)) 14261 14265 #endif 14262 14266 {
Note:
See TracChangeset
for help on using the changeset viewer.