儲存庫 vbox 的更動 16465
- 時間撮記:
- 2009-2-2 下午03:25:18 (16 年 以前)
- 位置:
- trunk/src/VBox/VMM/VMMAll
- 檔案:
-
- 修改 3 筆資料
圖例:
- 未更動
- 新增
- 刪除
-
trunk/src/VBox/VMM/VMMAll/IOMAllMMIO.cpp
r16458 r16465 1785 1785 #endif 1786 1786 1787 #if 0 1787 /* @note this is a NOP in the EPT case; we'll just let it fault again to resync the page. */ 1788 1788 rc = PGMPrefetchPage(pVM, (RTGCPTR)GCPhys); 1789 #else1790 /* Mark it as writable and present so reads and writes no longer fault. */1791 rc = PGMShwModifyPage(pVM, (RTGCPTR)GCPhys, 1, fPageFlags, ~fPageFlags);1792 #endif1793 1789 Assert(rc == VINF_SUCCESS || rc == VERR_PAGE_NOT_PRESENT || rc == VERR_PAGE_TABLE_NOT_PRESENT); 1794 1795 1790 return VINF_SUCCESS; 1796 1791 } … … 1807 1802 VMMDECL(int) IOMMMIOResetRegion(PVM pVM, RTGCPHYS GCPhys) 1808 1803 { 1809 uint32_t cb;1810 1811 1804 Log(("IOMMMIOResetRegion %RGp\n", GCPhys)); 1812 1805 … … 1825 1818 1826 1819 1827 cb = pRange->cb; 1820 /* Reset the entire range by clearing all shadow page table entries. */ 1821 int rc = PGMHandlerPhysicalReset(pVM, pRange->GCPhys); 1822 AssertRC(rc); 1823 1824 #ifdef VBOX_STRICT 1825 uint32_t cb = pRange->cb; 1826 1828 1827 GCPhys = pRange->GCPhys; 1829 1828 1830 1829 while (cb) 1831 1830 { 1832 int rc = PGMHandlerPhysicalPageReset(pVM, pRange->GCPhys, GCPhys); 1833 AssertRC(rc); 1834 1835 /* Mark it as not present again to intercept all read and write access. */ 1836 #if 0 1837 rc = PGMPrefetchPage(pVM, (RTGCPTR)GCPhys); 1838 #else 1839 rc = PGMShwModifyPage(pVM, (RTGCPTR)GCPhys, 1, 0, ~(uint64_t)(X86_PTE_RW|X86_PTE_P)); 1840 Assert(rc == VINF_SUCCESS || rc == VERR_PAGE_NOT_PRESENT || rc == VERR_PAGE_TABLE_NOT_PRESENT); 1841 #endif 1842 1843 #ifdef VBOX_STRICT 1831 1844 1832 uint64_t fFlags; 1845 1833 RTHCPHYS HCPhys; 1846 1834 rc = PGMShwGetPage(pVM, (RTGCPTR)GCPhys, &fFlags, &HCPhys); 1847 1835 Assert(rc == VERR_PAGE_NOT_PRESENT || rc == VERR_PAGE_TABLE_NOT_PRESENT); 1848 #endif1849 1836 cb -= PAGE_SIZE; 1850 1837 GCPhys += PAGE_SIZE; 1851 1838 } 1839 #endif 1852 1840 return VINF_SUCCESS; 1853 1841 } -
trunk/src/VBox/VMM/VMMAll/PGMAllHandler.cpp
r16463 r16465 819 819 case PGMPHYSHANDLERTYPE_PHYSICAL_WRITE: 820 820 case PGMPHYSHANDLERTYPE_PHYSICAL_ALL: 821 case PGMPHYSHANDLERTYPE_MMIO: /* @note Only use when clearing aliased mmio ranges! */ 821 822 { 822 823 /* … … 842 843 * Invalid. 843 844 */ 844 case PGMPHYSHANDLERTYPE_MMIO:845 AssertMsgFailed(("Can't reset type %d!\n", pCur->enmType));846 rc = VERR_INTERNAL_ERROR;847 break;848 849 845 default: 850 846 AssertMsgFailed(("Invalid type %d! Corruption!\n", pCur->enmType)); -
trunk/src/VBox/VMM/VMMAll/PGMAllShw.h
r16358 r16465 358 358 { 359 359 pPT->a[iPTE].u = (pPT->a[iPTE].u & (fMask | SHW_PTE_PG_MASK)) | (fFlags & ~SHW_PTE_PG_MASK); 360 /** @todo r=bird: I think this may break assumptions in page pool GCPhys 361 * tracking, and I seems to recall putting it here to prevent API users from 362 * making anything !P. The assertion is kind of useless now, as it 363 * won't hit anything any longer... */ 364 Assert(pPT->a[iPTE].n.u1Present || !(fMask & X86_PTE_P)); 360 Assert(pPT->a[iPTE].n.u1Present); 365 361 # if PGM_SHW_TYPE == PGM_TYPE_EPT 366 362 HWACCMInvalidatePhysPage(pVM, (RTGCPHYS)GCPtr);
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器