Changeset 30301 in vbox
- Timestamp:
- Jun 18, 2010 8:39:09 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 62841
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PGMInternal.h
r29646 r30301 3402 3402 void pgmR3PoolResetUnpluggedCpu(PVM pVM, PVMCPU pVCpu); 3403 3403 void pgmR3PoolReset(PVM pVM); 3404 void pgmR3PoolClearAll(PVM pVM );3405 DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pVCpu, void * pvUser);3404 void pgmR3PoolClearAll(PVM pVM, bool fFlushRemTlb); 3405 DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pVCpu, void *fpvFlushRemTbl); 3406 3406 3407 3407 #endif /* IN_RING3 */ -
trunk/src/VBox/VMM/PGMPool.cpp
r30013 r30301 596 596 * @param pVM The VM handle. 597 597 * @param pVCpu The VMCPU for the EMT we're being called on. Unused. 598 * @param pvUser Unused parameter. 599 * 600 */ 601 DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pVCpu, void *pvUser) 598 * @param fpvFlushRemTlb When not NULL, we'll flush the REM TLB as well. 599 * (This is the pvUser, so it has to be void *.) 600 * 601 */ 602 DECLCALLBACK(VBOXSTRICTRC) pgmR3PoolClearAllRendezvous(PVM pVM, PVMCPU pVCpu, void *fpvFlushRemTbl) 602 603 { 603 604 PPGMPOOL pPool = pVM->pgm.s.CTX_SUFF(pPool); … … 790 791 /* Flush job finished. */ 791 792 VM_FF_CLEAR(pVM, VM_FF_PGM_POOL_FLUSH_PENDING); 792 793 793 pPool->cPresent = 0; 794 794 pgmUnlock(pVM); 795 795 796 PGM_INVL_ALL_VCPU_TLBS(pVM); 797 798 if (fpvFlushRemTbl) 799 for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++) 800 CPUMSetChangedFlags(&pVM->aCpus[idCpu], CPUM_CHANGED_GLOBAL_TLB_FLUSH); 801 796 802 STAM_PROFILE_STOP(&pPool->StatClearAll, c); 797 803 return VINF_SUCCESS; … … 802 808 * Clears the shadow page pool. 803 809 * 804 * @param pVM The VM handle. 805 */ 806 void pgmR3PoolClearAll(PVM pVM) 810 * @param pVM The VM handle. 811 * @param fFlushRemTlb When set, the REM TLB is scheduled for flushing as 812 * well. 813 */ 814 void pgmR3PoolClearAll(PVM pVM, bool fFlushRemTlb) 807 815 { 808 int rc = VMMR3EmtRendezvous(pVM, VMMEMTRENDEZVOUS_FLAGS_TYPE_ONCE, pgmR3PoolClearAllRendezvous, NULL);816 int rc = VMMR3EmtRendezvous(pVM, VMMEMTRENDEZVOUS_FLAGS_TYPE_ONCE, pgmR3PoolClearAllRendezvous, &fFlushRemTlb); 809 817 AssertRC(rc); 810 818 } -
trunk/src/VBox/VMM/PGMSavedState.cpp
r28800 r30301 1548 1548 if (paLSPages[iPage].fIgnore) 1549 1549 continue; 1550 if (PGM_PAGE_GET_TYPE(&pCur->aPages[iPage]) != PGMPAGETYPE_RAM) /* in case of recent r amppings */1550 if (PGM_PAGE_GET_TYPE(&pCur->aPages[iPage]) != PGMPAGETYPE_RAM) /* in case of recent remappings */ 1551 1551 continue; 1552 1552 if ( PGM_PAGE_GET_STATE(&pCur->aPages[iPage]) … … 1775 1775 pgmR3ScanMmio2Pages(pVM, uPass); 1776 1776 pgmR3ScanRamPages(pVM, false /*fFinalPass*/); 1777 pgmR3PoolClearAll(pVM ); /** @todo this could perhaps be optimized a bit. */1777 pgmR3PoolClearAll(pVM, true /*fFlushRemTlb*/); /** @todo this could perhaps be optimized a bit. */ 1778 1778 1779 1779 /* -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r29702 r30301 2571 2571 # ifdef IN_RING3 /* Don't flush in ring-0 or raw mode, it's taking too long. */ 2572 2572 if (pVCpu->pgm.s.fSyncFlags & PGM_SYNC_CLEAR_PGM_POOL) 2573 pgmR3PoolClearAll(pVM );2573 pgmR3PoolClearAll(pVM, false /*fFlushRemTlb*/); 2574 2574 # else /* !IN_RING3 */ 2575 2575 if (pVCpu->pgm.s.fSyncFlags & PGM_SYNC_CLEAR_PGM_POOL)
Note:
See TracChangeset
for help on using the changeset viewer.