Changeset 65957 in vbox for trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
- Timestamp:
- Mar 6, 2017 8:41:43 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r65901 r65957 737 737 * @param pDis The disassembly info for the faulting instruction. 738 738 * @param pvFault The fault address. 739 * @param pPage The pool page being accessed. 739 740 * 740 741 * @remark The REP prefix check is left to the caller because of STOSD/W. 741 742 */ 742 DECLINLINE(bool) pgmRZPoolMonitorIsReused(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, PDISCPUSTATE pDis, RTGCPTR pvFault) 743 { 743 DECLINLINE(bool) pgmRZPoolMonitorIsReused(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, PDISCPUSTATE pDis, RTGCPTR pvFault, 744 PPGMPOOLPAGE pPage) 745 { 746 /* Locked (CR3, PDPTR*4) should not be reusable. Considering them as 747 such may cause loops booting tst-ubuntu-15_10-64-efi, ++. */ 748 if (pPage->cLocked) 749 { 750 Log2(("pgmRZPoolMonitorIsReused: %RGv (%p) can't have been resued, because it's locked!\n", pvFault, pPage)); 751 return false; 752 } 753 744 754 # ifndef IN_RC 745 755 /** @todo could make this general, faulting close to rsp should be a safe reuse heuristic. */ … … 1188 1198 || pgmPoolIsPageLocked(pPage) 1189 1199 ) 1190 && !(fReused = pgmRZPoolMonitorIsReused(pVM, pVCpu, pRegFrame, pDis, pvFault ))1200 && !(fReused = pgmRZPoolMonitorIsReused(pVM, pVCpu, pRegFrame, pDis, pvFault, pPage)) 1191 1201 && !pgmRZPoolMonitorIsForking(pPool, pDis, GCPhysFault & PAGE_OFFSET_MASK)) 1192 1202 { … … 1289 1299 && (pPage->enmKind == PGMPOOLKIND_PAE_PT_FOR_PAE_PT || pPage->enmKind == PGMPOOLKIND_PAE_PT_FOR_32BIT_PT) 1290 1300 && ( fNotReusedNotForking 1291 || ( !pgmRZPoolMonitorIsReused(pVM, pVCpu, pRegFrame, pDis, pvFault )1301 || ( !pgmRZPoolMonitorIsReused(pVM, pVCpu, pRegFrame, pDis, pvFault, pPage) 1292 1302 && !pgmRZPoolMonitorIsForking(pPool, pDis, GCPhysFault & PAGE_OFFSET_MASK)) 1293 1303 )
Note:
See TracChangeset
for help on using the changeset viewer.