儲存庫 vbox 的更動 16907
- 時間撮記:
- 2009-2-18 下午03:04:16 (16 年 以前)
- 位置:
- trunk/src/VBox/VMM
- 檔案:
-
- 修改 7 筆資料
圖例:
- 未更動
- 新增
- 刪除
-
trunk/src/VBox/VMM/PGM.cpp
r16865 r16907 1157 1157 pVM->pgm.s.enmHostMode = SUPPAGINGMODE_INVALID; 1158 1158 pVM->pgm.s.GCPhysCR3 = NIL_RTGCPHYS; 1159 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY1160 1159 pVM->pgm.s.GCPhysGstCR3Monitored = NIL_RTGCPHYS; 1161 #endif1162 1160 pVM->pgm.s.fA20Enabled = true; 1163 1161 pVM->pgm.s.GCPhys4MBPSEMask = RT_BIT_64(32) - 1; /* default; checked later */ … … 3067 3065 pVM->pgm.s.pfnR3GstModifyPage = pModeData->pfnR3GstModifyPage; 3068 3066 pVM->pgm.s.pfnR3GstGetPDE = pModeData->pfnR3GstGetPDE; 3069 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY3070 3067 pVM->pgm.s.pfnR3GstMonitorCR3 = pModeData->pfnR3GstMonitorCR3; 3071 3068 pVM->pgm.s.pfnR3GstUnmonitorCR3 = pModeData->pfnR3GstUnmonitorCR3; 3072 #endif3073 3069 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 3074 3070 pVM->pgm.s.pfnR3GstWriteHandlerCR3 = pModeData->pfnR3GstWriteHandlerCR3; … … 3080 3076 pVM->pgm.s.pfnRCGstModifyPage = pModeData->pfnRCGstModifyPage; 3081 3077 pVM->pgm.s.pfnRCGstGetPDE = pModeData->pfnRCGstGetPDE; 3082 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY3083 3078 pVM->pgm.s.pfnRCGstMonitorCR3 = pModeData->pfnRCGstMonitorCR3; 3084 3079 pVM->pgm.s.pfnRCGstUnmonitorCR3 = pModeData->pfnRCGstUnmonitorCR3; 3085 #endif3086 3080 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 3087 3081 pVM->pgm.s.pfnRCGstWriteHandlerCR3 = pModeData->pfnRCGstWriteHandlerCR3; … … 3091 3085 pVM->pgm.s.pfnR0GstModifyPage = pModeData->pfnR0GstModifyPage; 3092 3086 pVM->pgm.s.pfnR0GstGetPDE = pModeData->pfnR0GstGetPDE; 3093 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY3094 3087 pVM->pgm.s.pfnR0GstMonitorCR3 = pModeData->pfnR0GstMonitorCR3; 3095 3088 pVM->pgm.s.pfnR0GstUnmonitorCR3 = pModeData->pfnR0GstUnmonitorCR3; 3096 #endif3097 3089 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 3098 3090 pVM->pgm.s.pfnR0GstWriteHandlerCR3 = pModeData->pfnR0GstWriteHandlerCR3; -
trunk/src/VBox/VMM/PGMGst.h
r16619 r16907 119 119 PGM_GST_DECL(int, ModifyPage)(PVM pVM, RTGCPTR GCPtr, size_t cb, uint64_t fFlags, uint64_t fMask); 120 120 PGM_GST_DECL(int, GetPDE)(PVM pVM, RTGCPTR GCPtr, PX86PDEPAE pPDE); 121 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY122 121 PGM_GST_DECL(int, MonitorCR3)(PVM pVM, RTGCPHYS GCPhysCR3); 123 122 PGM_GST_DECL(int, UnmonitorCR3)(PVM pVM); 124 #endif125 123 __END_DECLS 126 124 … … 145 143 pModeData->pfnR3GstGetPage = PGM_GST_NAME(GetPage); 146 144 pModeData->pfnR3GstModifyPage = PGM_GST_NAME(ModifyPage); 147 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY148 145 pModeData->pfnR3GstMonitorCR3 = PGM_GST_NAME(MonitorCR3); 149 146 pModeData->pfnR3GstUnmonitorCR3 = PGM_GST_NAME(UnmonitorCR3); 150 #endif151 147 152 148 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY … … 176 172 rc = PDMR3LdrGetSymbolRC(pVM, NULL, PGM_GST_NAME_RC_STR(GetPDE), &pModeData->pfnRCGstGetPDE); 177 173 AssertMsgRCReturn(rc, ("%s -> rc=%Rrc\n", PGM_GST_NAME_RC_STR(GetPDE), rc), rc); 178 # ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY179 174 rc = PDMR3LdrGetSymbolRC(pVM, NULL, PGM_GST_NAME_RC_STR(MonitorCR3), &pModeData->pfnRCGstMonitorCR3); 180 175 AssertMsgRCReturn(rc, ("%s -> rc=%Rrc\n", PGM_GST_NAME_RC_STR(MonitorCR3), rc), rc); 181 176 rc = PDMR3LdrGetSymbolRC(pVM, NULL, PGM_GST_NAME_RC_STR(UnmonitorCR3), &pModeData->pfnRCGstUnmonitorCR3); 182 177 AssertMsgRCReturn(rc, ("%s -> rc=%Rrc\n", PGM_GST_NAME_RC_STR(UnmonitorCR3), rc), rc); 183 # endif184 178 # ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 185 179 # if PGM_GST_TYPE == PGM_TYPE_32BIT || PGM_GST_TYPE == PGM_TYPE_PAE … … 199 193 rc = PDMR3LdrGetSymbolR0(pVM, NULL, PGM_GST_NAME_R0_STR(GetPDE), &pModeData->pfnR0GstGetPDE); 200 194 AssertMsgRCReturn(rc, ("%s -> rc=%Rrc\n", PGM_GST_NAME_R0_STR(GetPDE), rc), rc); 201 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY202 195 rc = PDMR3LdrGetSymbolR0(pVM, NULL, PGM_GST_NAME_R0_STR(MonitorCR3), &pModeData->pfnR0GstMonitorCR3); 203 196 AssertMsgRCReturn(rc, ("%s -> rc=%Rrc\n", PGM_GST_NAME_R0_STR(MonitorCR3), rc), rc); 204 197 rc = PDMR3LdrGetSymbolR0(pVM, NULL, PGM_GST_NAME_R0_STR(UnmonitorCR3), &pModeData->pfnR0GstUnmonitorCR3); 205 198 AssertMsgRCReturn(rc, ("%s -> rc=%Rrc\n", PGM_GST_NAME_R0_STR(UnmonitorCR3), rc), rc); 206 #endif207 199 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 208 200 # if PGM_GST_TYPE == PGM_TYPE_32BIT || PGM_GST_TYPE == PGM_TYPE_PAE … … 235 227 #else 236 228 int rc = PGM_BTH_NAME(MapCR3)(pVM, GCPhysCR3); 229 #endif 237 230 if (RT_SUCCESS(rc) && !pVM->pgm.s.fMappingsFixed) 238 231 rc = PGM_GST_NAME(MonitorCR3)(pVM, GCPhysCR3); 239 #endif240 232 return rc; 241 233 } … … 266 258 int rc; 267 259 268 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY269 rc = PGM_BTH_PFN(UnmapCR3, pVM)(pVM);270 #else271 260 rc = PGM_GST_NAME(UnmonitorCR3)(pVM); 272 261 if (RT_SUCCESS(rc)) 262 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 263 rc = PGM_BTH_PFN(UnmapCR3, pVM)(pVM); 264 #else 273 265 rc = PGM_BTH_NAME(UnmapCR3)(pVM); 274 266 #endif -
trunk/src/VBox/VMM/PGMInternal.h
r16904 r16907 1635 1635 * It's a hack required because of REMR3NotifyHandlerPhysicalDeregister. */ 1636 1636 bool volatile fReusedFlushPending; 1637 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY1638 1637 /** Used to indicate that the guest is mapping the page is also used as a CR3. 1639 1638 * In these cases the access handler acts differently and will check … … 1643 1642 */ 1644 1643 bool fCR3Mix; 1645 #endif1646 1644 } PGMPOOLPAGE, *PPGMPOOLPAGE, **PPPGMPOOLPAGE; 1647 1645 … … 2050 2048 DECLR3CALLBACKMEMBER(int, pfnR3GstModifyPage,(PVM pVM, RTGCPTR GCPtr, size_t cbPages, uint64_t fFlags, uint64_t fMask)); 2051 2049 DECLR3CALLBACKMEMBER(int, pfnR3GstGetPDE,(PVM pVM, RTGCPTR GCPtr, PX86PDEPAE pPde)); 2052 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY2053 2050 DECLR3CALLBACKMEMBER(int, pfnR3GstMonitorCR3,(PVM pVM, RTGCPHYS GCPhysCR3)); 2054 2051 DECLR3CALLBACKMEMBER(int, pfnR3GstUnmonitorCR3,(PVM pVM)); 2055 #endif2056 2052 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 2057 2053 R3PTRTYPE(PFNPGMR3PHYSHANDLER) pfnR3GstWriteHandlerCR3; … … 2063 2059 DECLRCCALLBACKMEMBER(int, pfnRCGstModifyPage,(PVM pVM, RTGCPTR GCPtr, size_t cbPages, uint64_t fFlags, uint64_t fMask)); 2064 2060 DECLRCCALLBACKMEMBER(int, pfnRCGstGetPDE,(PVM pVM, RTGCPTR GCPtr, PX86PDEPAE pPde)); 2065 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY2066 2061 DECLRCCALLBACKMEMBER(int, pfnRCGstMonitorCR3,(PVM pVM, RTGCPHYS GCPhysCR3)); 2067 2062 DECLRCCALLBACKMEMBER(int, pfnRCGstUnmonitorCR3,(PVM pVM)); 2068 #endif2069 2063 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 2070 2064 RCPTRTYPE(PFNPGMRCPHYSHANDLER) pfnRCGstWriteHandlerCR3; … … 2074 2068 DECLR0CALLBACKMEMBER(int, pfnR0GstModifyPage,(PVM pVM, RTGCPTR GCPtr, size_t cbPages, uint64_t fFlags, uint64_t fMask)); 2075 2069 DECLR0CALLBACKMEMBER(int, pfnR0GstGetPDE,(PVM pVM, RTGCPTR GCPtr, PX86PDEPAE pPde)); 2076 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY2077 2070 DECLR0CALLBACKMEMBER(int, pfnR0GstMonitorCR3,(PVM pVM, RTGCPHYS GCPhysCR3)); 2078 2071 DECLR0CALLBACKMEMBER(int, pfnR0GstUnmonitorCR3,(PVM pVM)); 2079 #endif2080 2072 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 2081 2073 R0PTRTYPE(PFNPGMRCPHYSHANDLER) pfnR0GstWriteHandlerCR3; … … 2177 2169 uint32_t u32Alignment; 2178 2170 #endif 2179 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY2180 2171 /** The physical address of the currently monitored guest CR3 page. 2181 2172 * When this value is NIL_RTGCPHYS no page is being monitored. */ 2182 2173 RTGCPHYS GCPhysGstCR3Monitored; 2183 #endif2184 2174 /** @name 32-bit Guest Paging. 2185 2175 * @{ */ … … 2345 2335 DECLR3CALLBACKMEMBER(int, pfnR3GstModifyPage,(PVM pVM, RTGCPTR GCPtr, size_t cbPages, uint64_t fFlags, uint64_t fMask)); 2346 2336 DECLR3CALLBACKMEMBER(int, pfnR3GstGetPDE,(PVM pVM, RTGCPTR GCPtr, PX86PDEPAE pPde)); 2347 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY2348 2337 DECLR3CALLBACKMEMBER(int, pfnR3GstMonitorCR3,(PVM pVM, RTGCPHYS GCPhysCR3)); 2349 2338 DECLR3CALLBACKMEMBER(int, pfnR3GstUnmonitorCR3,(PVM pVM)); 2350 #endif2351 2339 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 2352 2340 R3PTRTYPE(PFNPGMR3PHYSHANDLER) pfnR3GstWriteHandlerCR3; … … 2358 2346 DECLRCCALLBACKMEMBER(int, pfnRCGstModifyPage,(PVM pVM, RTGCPTR GCPtr, size_t cbPages, uint64_t fFlags, uint64_t fMask)); 2359 2347 DECLRCCALLBACKMEMBER(int, pfnRCGstGetPDE,(PVM pVM, RTGCPTR GCPtr, PX86PDEPAE pPde)); 2360 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY2361 2348 DECLRCCALLBACKMEMBER(int, pfnRCGstMonitorCR3,(PVM pVM, RTGCPHYS GCPhysCR3)); 2362 2349 DECLRCCALLBACKMEMBER(int, pfnRCGstUnmonitorCR3,(PVM pVM)); 2363 #endif2364 2350 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 2365 2351 RCPTRTYPE(PFNPGMRCPHYSHANDLER) pfnRCGstWriteHandlerCR3; … … 2373 2359 DECLR0CALLBACKMEMBER(int, pfnR0GstModifyPage,(PVM pVM, RTGCPTR GCPtr, size_t cbPages, uint64_t fFlags, uint64_t fMask)); 2374 2360 DECLR0CALLBACKMEMBER(int, pfnR0GstGetPDE,(PVM pVM, RTGCPTR GCPtr, PX86PDEPAE pPde)); 2375 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY2376 2361 DECLR0CALLBACKMEMBER(int, pfnR0GstMonitorCR3,(PVM pVM, RTGCPHYS GCPhysCR3)); 2377 2362 DECLR0CALLBACKMEMBER(int, pfnR0GstUnmonitorCR3,(PVM pVM)); 2378 #endif2379 2363 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY 2380 2364 R0PTRTYPE(PFNPGMRCPHYSHANDLER) pfnR0GstWriteHandlerCR3; … … 2977 2961 void pgmPoolMonitorModifiedInsert(PPGMPOOL pPool, PPGMPOOLPAGE pPage); 2978 2962 void pgmPoolMonitorModifiedClearAll(PVM pVM); 2963 # ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 2964 int pgmPoolMonitorMonitorCR3(PPGMPOOL pPool, RTGCPHYS GCPhysCR3); 2965 int pgmPoolMonitorUnmonitorCR3(PPGMPOOL pPool, RTGCPHYS GCPhysCR3); 2966 # else 2979 2967 int pgmPoolMonitorMonitorCR3(PPGMPOOL pPool, uint16_t idxRoot, RTGCPHYS GCPhysCR3); 2980 2968 int pgmPoolMonitorUnmonitorCR3(PPGMPOOL pPool, uint16_t idxRoot); 2969 # endif 2981 2970 #endif 2982 2971 -
trunk/src/VBox/VMM/PGMPool.cpp
r16904 r16907 586 586 } 587 587 else if ( ( pPage->cModifications < 96 /* it's cheaper here. */ 588 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY589 588 || pPage->fCR3Mix 590 #endif591 589 ) 592 590 && cbBuf <= 4) -
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r16882 r16907 719 719 pVM->pgm.s.fSyncFlags &= ~PGM_SYNC_MONITOR_CR3; 720 720 Assert(!pVM->pgm.s.fMappingsFixed); 721 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY722 721 Assert(pVM->pgm.s.GCPhysCR3 == pVM->pgm.s.GCPhysGstCR3Monitored); 723 722 rc = PGM_GST_PFN(MonitorCR3, pVM)(pVM, pVM->pgm.s.GCPhysCR3); 724 #endif725 723 } 726 724 … … 1641 1639 { 1642 1640 pVM->pgm.s.fSyncFlags &= ~PGM_SYNC_MONITOR_CR3; 1643 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY1644 1641 rc = PGM_GST_PFN(MonitorCR3, pVM)(pVM, GCPhysCR3); 1645 #endif1646 1642 } 1647 1643 } … … 1670 1666 pVM->pgm.s.fSyncFlags &= ~PGM_SYNC_MONITOR_CR3; 1671 1667 Assert(!pVM->pgm.s.fMappingsFixed); 1672 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY1673 1668 rc = PGM_GST_PFN(MonitorCR3, pVM)(pVM, GCPhysCR3); 1674 #endif1675 1669 } 1676 1670 if (fGlobal) … … 1848 1842 pVM->pgm.s.fSyncFlags &= ~PGM_SYNC_MONITOR_CR3; 1849 1843 Assert(!pVM->pgm.s.fMappingsFixed); 1850 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY1851 1844 Assert(pVM->pgm.s.GCPhysCR3 == pVM->pgm.s.GCPhysGstCR3Monitored); 1852 1845 rc = PGM_GST_PFN(MonitorCR3, pVM)(pVM, pVM->pgm.s.GCPhysCR3); 1853 #endif1854 1846 } 1855 1847 } -
trunk/src/VBox/VMM/VMMAll/PGMAllGst.h
r16317 r16907 129 129 PGM_GST_DECL(int, ModifyPage)(PVM pVM, RTGCPTR GCPtr, size_t cb, uint64_t fFlags, uint64_t fMask); 130 130 PGM_GST_DECL(int, GetPDE)(PVM pVM, RTGCPTR GCPtr, PX86PDEPAE pPDE); 131 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY132 131 PGM_GST_DECL(int, MonitorCR3)(PVM pVM, RTGCPHYS GCPhysCR3); 133 132 PGM_GST_DECL(int, UnmonitorCR3)(PVM pVM); 134 #endif135 133 PGM_GST_DECL(bool, HandlerVirtualUpdate)(PVM pVM, uint32_t cr4); 136 134 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY … … 414 412 415 413 416 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY417 418 414 #undef LOG_GROUP 419 415 #define LOG_GROUP LOG_GROUP_PGM_POOL … … 438 434 * Register/Modify write phys handler for guest's CR3 if it changed. 439 435 */ 436 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 437 438 if (pVM->pgm.s.GCPhysGstCR3Monitored != GCPhysCR3) 439 { 440 rc = pgmPoolMonitorMonitorCR3(pVM->pgm.s.CTX_SUFF(pPool), GCPhysCR3); 441 if (RT_FAILURE(rc)) 442 { 443 AssertMsgFailed(("PGMHandlerPhysicalModify/PGMR3HandlerPhysicalRegister failed, rc=%Rrc GCPhysGstCR3Monitored=%RGp GCPhysCR3=%RGp\n", 444 rc, pVM->pgm.s.GCPhysGstCR3Monitored, GCPhysCR3)); 445 return rc; 446 } 447 pVM->pgm.s.GCPhysGstCR3Monitored = GCPhysCR3; 448 } 449 450 #if PGM_GST_TYPE == PGM_TYPE_PAE 451 /* 452 * Do the 4 PDs. 453 */ 454 PX86PDPT pGuestPDPT = pgmGstGetPaePDPTPtr(&pVM->pgm.s); 455 for (unsigned i = 0; i < X86_PG_PAE_PDPE_ENTRIES; i++) 456 { 457 if (pGuestPDPT->a[i].n.u1Present) 458 { 459 RTGCPHYS GCPhys = pGuestPDPT->a[i].u & X86_PDPE_PG_MASK; 460 if (pVM->pgm.s.aGCPhysGstPaePDsMonitored[i] != GCPhys) 461 { 462 Assert(pVM->pgm.s.enmShadowMode == PGMMODE_PAE || pVM->pgm.s.enmShadowMode == PGMMODE_PAE_NX); 463 464 rc = pgmPoolMonitorMonitorCR3(pVM->pgm.s.CTX_SUFF(pPool), GCPhys); 465 } 466 467 if (RT_FAILURE(rc)) 468 { 469 AssertMsgFailed(("PGMHandlerPhysicalModify/PGMR3HandlerPhysicalRegister failed, rc=%Rrc GCPhysGstCR3Monitored=%RGp GCPhysCR3=%RGp\n", 470 rc, pVM->pgm.s.aGCPhysGstPaePDsMonitored[i], GCPhys)); 471 return rc; 472 } 473 pVM->pgm.s.aGCPhysGstPaePDsMonitored[i] = GCPhys; 474 } 475 else if (pVM->pgm.s.aGCPhysGstPaePDsMonitored[i] != NIL_RTGCPHYS) 476 { 477 rc = pgmPoolMonitorUnmonitorCR3(pVM->pgm.s.CTX_SUFF(pPool), pVM->pgm.s.aGCPhysGstPaePDsMonitored[i]); 478 AssertRC(rc); 479 pVM->pgm.s.aGCPhysGstPaePDsMonitored[i] = NIL_RTGCPHYS; 480 } 481 } 482 483 #else 484 /* prot/real/amd64 mode stub */ 485 486 #endif 487 488 #else 440 489 #if PGM_GST_TYPE == PGM_TYPE_32BIT 441 490 … … 525 574 526 575 #endif 576 #endif /* VBOX_WITH_PGMPOOL_PAGING_ONLY */ 527 577 return rc; 528 578 } … … 544 594 * before we enter GC again. 545 595 */ 596 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 597 598 /* Unmonitor the root. (pd or pdpt) */ 599 if (pVM->pgm.s.GCPhysGstCR3Monitored != NIL_RTGCPHYS) 600 { 601 rc = pgmPoolMonitorUnmonitorCR3(pVM->pgm.s.CTX_SUFF(pPool), pVM->pgm.s.GCPhysGstCR3Monitored); 602 AssertRCReturn(rc, rc); 603 pVM->pgm.s.GCPhysGstCR3Monitored = NIL_RTGCPHYS; 604 } 605 606 #if PGM_GST_TYPE == PGM_TYPE_PAE 607 /* The 4 PDs. */ 608 for (unsigned i = 0; i < X86_PG_PAE_PDPE_ENTRIES; i++) 609 { 610 if (pVM->pgm.s.aGCPhysGstPaePDsMonitored[i] != NIL_RTGCPHYS) 611 { 612 Assert(pVM->pgm.s.enmShadowMode == PGMMODE_PAE || pVM->pgm.s.enmShadowMode == PGMMODE_PAE_NX); 613 int rc2 = pgmPoolMonitorUnmonitorCR3(pVM->pgm.s.CTX_SUFF(pPool), pVM->pgm.s.aGCPhysGstPaePDsMonitored[i]); 614 AssertRC(rc2); 615 if (RT_FAILURE(rc2)) 616 rc = rc2; 617 pVM->pgm.s.aGCPhysGstPaePDsMonitored[i] = NIL_RTGCPHYS; 618 } 619 } 620 #else 621 /* prot/real/amd64 mode stub */ 622 #endif 623 624 #else 625 546 626 #if PGM_GST_TYPE == PGM_TYPE_32BIT 547 627 if (pVM->pgm.s.GCPhysGstCR3Monitored != NIL_RTGCPHYS) … … 589 669 /* prot/real/amd64 mode stub */ 590 670 #endif 671 #endif /* VBOX_WITH_PGMPOOL_PAGING_ONLY */ 591 672 return rc; 592 673 … … 595 676 #undef LOG_GROUP 596 677 #define LOG_GROUP LOG_GROUP_PGM 597 598 #endif /* VBOX_WITH_PGMPOOL_PAGING_ONLY */599 678 600 679 -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r16904 r16907 1235 1235 bool fReused = false; 1236 1236 if ( ( pPage->cModifications < 48 /** @todo #define */ /** @todo need to check that it's not mapping EIP. */ /** @todo adjust this! */ 1237 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY1238 1237 || pPage->fCR3Mix 1239 #endif1240 1238 ) 1241 1239 && !(fReused = pgmPoolMonitorIsReused(pVM, pPage, pRegFrame, &Cpu, pvFault)) … … 1947 1945 PPGMPOOLPAGE pNewHead = &pPool->aPages[pPage->iMonitoredNext]; 1948 1946 pNewHead->iMonitoredPrev = NIL_PGMPOOL_IDX; 1949 #ifndef VBOX_WITH_PGMPOOL_PAGING_ONLY1950 1947 pNewHead->fCR3Mix = pPage->fCR3Mix; 1951 #endif1952 1948 rc = PGMHandlerPhysicalChangeCallbacks(pVM, pPage->GCPhys & ~(RTGCPHYS)(PAGE_SIZE - 1), 1953 1949 pPool->pfnAccessHandlerR3, MMHyperCCToR3(pVM, pNewHead), … … 2031 2027 * @param GCPhysCR3 The (new) CR3 value. 2032 2028 */ 2029 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 2030 int pgmPoolMonitorMonitorCR3(PPGMPOOL pPool, RTGCPHYS GCPhysCR3) 2031 { 2032 return VINF_SUCCESS; 2033 } 2034 #else 2033 2035 int pgmPoolMonitorMonitorCR3(PPGMPOOL pPool, uint16_t idxRoot, RTGCPHYS GCPhysCR3) 2034 2036 { … … 2077 2079 return rc; 2078 2080 } 2081 #endif /* VBOX_WITH_PGMPOOL_PAGING_ONLY */ 2079 2082 2080 2083 … … 2086 2089 * @param idxRoot The CR3 (root) page index. 2087 2090 */ 2091 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 2092 int pgmPoolMonitorUnmonitorCR3(PPGMPOOL pPool, RTGCPHYS GCPhysCR3) 2093 { 2094 return VINF_SUCCESS; 2095 } 2096 #else 2088 2097 int pgmPoolMonitorUnmonitorCR3(PPGMPOOL pPool, uint16_t idxRoot) 2089 2098 { … … 2107 2116 return rc; 2108 2117 } 2118 #endif /* VBOX_WITH_PGMPOOL_PAGING_ONLY */ 2109 2119 2110 2120 # endif /* PGMPOOL_WITH_MIXED_PT_CR3 */ … … 4115 4125 pPage->fCached = false; 4116 4126 pPage->fReusedFlushPending = false; 4127 pPage->fCR3Mix = false; 4117 4128 #ifdef PGMPOOL_WITH_USER_TRACKING 4118 4129 pPage->iUserHead = NIL_PGMPOOL_USER_INDEX; 4119 #else4120 pPage->fCR3Mix = false;4121 4130 #endif 4122 4131 #ifdef PGMPOOL_WITH_CACHE … … 4502 4511 pPage->fCached = false; 4503 4512 pPage->fReusedFlushPending = false; 4513 pPage->fCR3Mix = false; 4504 4514 #ifdef PGMPOOL_WITH_MONITORING 4505 4515 pPage->cModifications = 0; 4506 4516 pPage->iModifiedNext = NIL_PGMPOOL_IDX; 4507 4517 pPage->iModifiedPrev = NIL_PGMPOOL_IDX; 4508 #else4509 pPage->fCR3Mix = false;4510 4518 #endif 4511 4519 #ifdef PGMPOOL_WITH_USER_TRACKING
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器