- Timestamp:
- Aug 27, 2010 9:17:42 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r32009 r32027 1812 1812 if (!PdeDst.n.u1Present) 1813 1813 { 1814 LogAlways(("CPU%d: SyncPage: Pde at %RGv changed behind our back! (pPdeDst=%p/%RX64)\n", pVCpu->idCpu, GCPtrPage, pPdeDst, (uint64_t)PdeDst.u)); 1814 1815 AssertMsg(pVM->cCpus > 1, ("Unexpected missing PDE p=%p/%RX64\n", pPdeDst, (uint64_t)PdeDst.u)); 1815 Log(("CPU%d: SyncPage: Pde at %RGv changed behind our back!\n", pVCpu->idCpu, GCPtrPage));1816 1816 return VINF_SUCCESS; /* force the instruction to be executed again. */ 1817 1817 } … … 1889 1889 * deal with locality. 1890 1890 */ 1891 unsigned iPTDst = (GCPtrPage >> SHW_PT_SHIFT) & SHW_PT_MASK; 1891 unsigned iPTDst = (GCPtrPage >> SHW_PT_SHIFT) & SHW_PT_MASK; 1892 const unsigned iPTDstPage = iPTDst; 1892 1893 # if PGM_SHW_TYPE == PGM_TYPE_PAE && PGM_GST_TYPE == PGM_TYPE_32BIT 1893 1894 /* Select the right PDE as we're emulating a 4kb page table with 2 shadow page tables. */ 1894 const unsigned offPTSrc = ((GCPtrPage >> SHW_PD_SHIFT) & 1) * 512;1895 const unsigned offPTSrc = ((GCPtrPage >> SHW_PD_SHIFT) & 1) * 512; 1895 1896 # else 1896 const unsigned offPTSrc = 0;1897 const unsigned offPTSrc = 0; 1897 1898 # endif 1898 const unsigned iPTDstEnd = RT_MIN(iPTDst + PGM_SYNC_NR_PAGES / 2, RT_ELEMENTS(pPTDst->a));1899 const unsigned iPTDstEnd = RT_MIN(iPTDst + PGM_SYNC_NR_PAGES / 2, RT_ELEMENTS(pPTDst->a)); 1899 1900 if (iPTDst < PGM_SYNC_NR_PAGES / 2) 1900 1901 iPTDst = 0; … … 1903 1904 for (; iPTDst < iPTDstEnd; iPTDst++) 1904 1905 { 1905 if (!SHW_PTE_IS_P(pPTDst->a[iPTDst])) 1906 if ( !SHW_PTE_IS_P(pPTDst->a[iPTDst]) 1907 || iPTDst == iPTDstPage) /* always sync GCPtrPage */ 1906 1908 { 1907 1909 GSTPTE PteSrc = pPTSrc->a[offPTSrc + iPTDst];
Note:
See TracChangeset
for help on using the changeset viewer.