儲存庫 vbox 的更動 17119
- 時間撮記:
- 2009-2-25 上午11:05:12 (16 年 以前)
- 檔案:
-
- 修改 1 筆資料
圖例:
- 未更動
- 新增
- 刪除
-
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r17116 r17119 380 380 for (unsigned i=0;i<2;i++) 381 381 { 382 # ifndef IN_RING0 382 383 if ((uShw.pPDPae->a[iShw + i].u & (PGM_PDFLAGS_MAPPING | X86_PDE_P)) == (PGM_PDFLAGS_MAPPING | X86_PDE_P)) 383 384 { … … 388 389 } 389 390 else 391 # endif /* !IN_RING0 */ 390 392 if (uShw.pPDPae->a[iShw+i].n.u1Present) 391 393 { … … 406 408 if (iShw2 < RT_ELEMENTS(uShw.pPDPae->a)) 407 409 { 410 # ifndef IN_RING0 408 411 if ((uShw.pPDPae->a[iShw2].u & (PGM_PDFLAGS_MAPPING | X86_PDE_P)) == (PGM_PDFLAGS_MAPPING | X86_PDE_P)) 409 412 { … … 414 417 } 415 418 else 419 # endif /* !IN_RING0 */ 416 420 if (uShw.pPDPae->a[iShw2].n.u1Present) 417 421 { … … 492 496 LogFlow(("pgmPoolMonitorChainChanging: PGMPOOLKIND_32BIT_PD %x\n", iShw)); 493 497 # endif 498 # ifndef IN_RING0 494 499 if (uShw.pPD->a[iShw].u & PGM_PDFLAGS_MAPPING) 495 500 { … … 500 505 break; 501 506 } 507 # endif /* !IN_RING0 */ 502 508 # ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 509 # ifndef IN_RING0 503 510 else 511 # endif /* !IN_RING0 */ 504 512 { 505 513 if (uShw.pPD->a[iShw].n.u1Present) … … 523 531 && iShw2 < RT_ELEMENTS(uShw.pPD->a)) 524 532 { 525 533 # ifndef IN_RING0 526 534 if (uShw.pPD->a[iShw2].u & PGM_PDFLAGS_MAPPING) 527 535 { … … 531 539 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShw2=%#x!\n", iShw2)); 532 540 } 541 # endif /* !IN_RING0 */ 533 542 # ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 543 # ifndef IN_RING0 534 544 else 545 # endif /* !IN_RING0 */ 535 546 { 536 547 if (uShw.pPD->a[iShw2].n.u1Present) … … 615 626 uShw.pv = PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pPage); 616 627 const unsigned iShw = off / sizeof(X86PDEPAE); 628 #ifndef IN_RING0 617 629 if (uShw.pPDPae->a[iShw].u & PGM_PDFLAGS_MAPPING) 618 630 { … … 623 635 break; 624 636 } 637 #endif /* !IN_RING0 */ 625 638 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 626 639 /* … … 656 669 AssertReturnVoid(iShw2 < RT_ELEMENTS(uShw.pPDPae->a)); 657 670 671 #ifndef IN_RING0 658 672 if ( iShw2 != iShw 659 673 && uShw.pPDPae->a[iShw2].u & PGM_PDFLAGS_MAPPING) … … 664 678 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShw2=%#x!\n", iShw2)); 665 679 } 680 #endif /* !IN_RING0 */ 666 681 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 667 else if (uShw.pPDPae->a[iShw2].n.u1Present) 682 # ifndef IN_RING0 683 else 684 # endif /* !IN_RING0 */ 685 if (uShw.pPDPae->a[iShw2].n.u1Present) 668 686 { 669 687 LogFlow(("pgmPoolMonitorChainChanging: pae pd iShw2=%#x: %RX64 -> freeing it!\n", iShw2, uShw.pPDPae->a[iShw2].u)); … … 706 724 if (iShw < X86_PG_PAE_PDPE_ENTRIES) /* don't use RT_ELEMENTS(uShw.pPDPT->a), because that's for long mode only */ 707 725 { 726 # ifndef IN_RING0 708 727 if (uShw.pPDPT->a[iShw].u & PGM_PLXFLAGS_MAPPING) 709 728 { … … 714 733 break; 715 734 } 735 # endif /* !IN_RING0 */ 716 736 # ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 737 # ifndef IN_RING0 717 738 else 739 # endif /* !IN_RING0 */ 718 740 if (uShw.pPDPT->a[iShw].n.u1Present) 719 741 { … … 736 758 && iShw2 < X86_PG_PAE_PDPE_ENTRIES) 737 759 { 760 # ifndef IN_RING0 738 761 if (uShw.pPDPT->a[iShw2].u & PGM_PLXFLAGS_MAPPING) 739 762 { … … 743 766 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShw2=%#x!\n", iShw2)); 744 767 } 768 # endif /* !IN_RING0 */ 745 769 # ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 770 # ifndef IN_RING0 746 771 else 772 # endif /* !IN_RING0 */ 747 773 if (uShw.pPDPT->a[iShw2].n.u1Present) 748 774 { … … 766 792 uShw.pv = PGMPOOL_PAGE_2_PTR(pPool->CTX_SUFF(pVM), pPage); 767 793 const unsigned iShw = off / sizeof(X86PDEPAE); 768 if (uShw.pPDPae->a[iShw].u & PGM_PDFLAGS_MAPPING) 794 Assert(!(uShw.pPDPae->a[iShw].u & PGM_PDFLAGS_MAPPING)); 795 if (uShw.pPDPae->a[iShw].n.u1Present) 769 796 { 770 Assert(pgmMapAreMappingsEnabled(&pPool->CTX_SUFF(pVM)->pgm.s)); 771 VM_FF_SET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3); 772 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShw=%#x!\n", iShw)); 773 } 774 else 775 { 776 if (uShw.pPDPae->a[iShw].n.u1Present) 777 { 778 LogFlow(("pgmPoolMonitorChainChanging: pae pd iShw=%#x: %RX64 -> freeing it!\n", iShw, uShw.pPDPae->a[iShw].u)); 779 pgmPoolFree(pPool->CTX_SUFF(pVM), 780 uShw.pPDPae->a[iShw].u & X86_PDE_PAE_PG_MASK, 781 pPage->idx, 782 iShw); 783 uShw.pPDPae->a[iShw].u = 0; 784 } 797 LogFlow(("pgmPoolMonitorChainChanging: pae pd iShw=%#x: %RX64 -> freeing it!\n", iShw, uShw.pPDPae->a[iShw].u)); 798 pgmPoolFree(pPool->CTX_SUFF(pVM), 799 uShw.pPDPae->a[iShw].u & X86_PDE_PAE_PG_MASK, 800 pPage->idx, 801 iShw); 802 uShw.pPDPae->a[iShw].u = 0; 785 803 } 786 804 /* paranoia / a bit assumptive. */ … … 792 810 AssertReturnVoid(iShw2 < RT_ELEMENTS(uShw.pPDPae->a)); 793 811 794 if ( iShw2 != iShw 795 && uShw.pPDPae->a[iShw2].u & PGM_PDFLAGS_MAPPING) 796 { 797 Assert(pgmMapAreMappingsEnabled(&pPool->CTX_SUFF(pVM)->pgm.s)); 798 VM_FF_SET(pPool->CTX_SUFF(pVM), VM_FF_PGM_SYNC_CR3); 799 LogFlow(("pgmPoolMonitorChainChanging: Detected conflict at iShw2=%#x!\n", iShw2)); 800 } 801 else 812 Assert(!(uShw.pPDPae->a[iShw2].u & PGM_PDFLAGS_MAPPING)); 802 813 if (uShw.pPDPae->a[iShw2].n.u1Present) 803 814 {
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器