Changeset 16465 in vbox
- Timestamp:
- Feb 2, 2009 3:25:18 PM (16 years ago)
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 3 edited
-
IOMAllMMIO.cpp (modified) (3 diffs)
-
PGMAllHandler.cpp (modified) (2 diffs)
-
PGMAllShw.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
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);
Note:
See TracChangeset
for help on using the changeset viewer.

