- Timestamp:
- Feb 18, 2009 10:11:10 AM (16 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PGMInternal.h
r16879 r16882 2983 2983 void pgmMapSetShadowPDEs(PVM pVM, PPGMMAPPING pMap, unsigned iNewPDE); 2984 2984 int pgmMapDeactivateCR3(PVM pVM, PPGMPOOLPAGE pShwPageCR3); 2985 #endif 2985 int pgmShwSyncPaePDPtr(PVM pVM, RTGCPTR GCPtr, PX86PDPE pGstPdpe, PX86PDPAE *ppPD); 2986 #endif 2987 #ifndef IN_RC 2988 int pgmShwSyncLongModePDPtr(PVM pVM, RTGCPTR64 GCPtr, PX86PML4E pGstPml4e, PX86PDPE pGstPdpe, PX86PDPAE *ppPD); 2989 #endif 2990 int pgmShwGetEPTPDPtr(PVM pVM, RTGCPTR64 GCPtr, PEPTPDPT *ppPdpt, PEPTPD *ppPD); 2986 2991 2987 2992 __END_DECLS -
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r16865 r16882 70 70 *******************************************************************************/ 71 71 DECLINLINE(int) pgmShwGetLongModePDPtr(PVM pVM, RTGCPTR64 GCPtr, PX86PML4E *ppPml4e, PX86PDPT *ppPdpt, PX86PDPAE *ppPD); 72 DECLINLINE(int) pgmShwSyncLongModePDPtr(PVM pVM, RTGCPTR64 GCPtr, PX86PML4E pGstPml4e, PX86PDPE pGstPdpe, PX86PDPAE *ppPD);73 DECLINLINE(int) pgmShwGetEPTPDPtr(PVM pVM, RTGCPTR64 GCPtr, PEPTPDPT *ppPdpt, PEPTPD *ppPD);74 72 DECLINLINE(int) pgmShwGetPAEPDPtr(PVM pVM, RTGCPTR GCPtr, PX86PDPT *ppPdpt, PX86PDPAE *ppPD); 75 73 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 76 74 DECLINLINE(int) pgmShwGetPaePoolPagePD(PPGM pPGM, RTGCPTR GCPtr, PPGMPOOLPAGE *ppShwPde); 77 DECLINLINE(int) pgmShwSyncPaePDPtr(PVM pVM, RTGCPTR GCPtr, PX86PDPE pGstPdpe, PX86PDPAE *ppPD);78 75 #endif 79 76 … … 870 867 * @param ppPD Receives address of page directory 871 868 */ 872 DECLINLINE(int)pgmShwSyncPaePDPtr(PVM pVM, RTGCPTR GCPtr, PX86PDPE pGstPdpe, PX86PDPAE *ppPD)869 int pgmShwSyncPaePDPtr(PVM pVM, RTGCPTR GCPtr, PX86PDPE pGstPdpe, PX86PDPAE *ppPD) 873 870 { 874 871 const unsigned iPdPt = (GCPtr >> X86_PDPT_SHIFT) & X86_PDPT_MASK_PAE; … … 976 973 * @param ppPD Receives address of page directory 977 974 */ 978 DECLINLINE(int)pgmShwSyncLongModePDPtr(PVM pVM, RTGCPTR64 GCPtr, PX86PML4E pGstPml4e, PX86PDPE pGstPdpe, PX86PDPAE *ppPD)975 int pgmShwSyncLongModePDPtr(PVM pVM, RTGCPTR64 GCPtr, PX86PML4E pGstPml4e, PX86PDPE pGstPdpe, PX86PDPAE *ppPD) 979 976 { 980 977 PPGM pPGM = &pVM->pgm.s; … … 1164 1161 * @param ppPD Receives address of page directory 1165 1162 */ 1166 DECLINLINE(int)pgmShwGetEPTPDPtr(PVM pVM, RTGCPTR64 GCPtr, PEPTPDPT *ppPdpt, PEPTPD *ppPD)1163 int pgmShwGetEPTPDPtr(PVM pVM, RTGCPTR64 GCPtr, PEPTPDPT *ppPdpt, PEPTPD *ppPD) 1167 1164 { 1168 1165 PPGM pPGM = &pVM->pgm.s; -
trunk/src/VBox/VMM/VMMAll/PGMAllMap.cpp
r16843 r16882 270 270 Assert(pShwPdpt); 271 271 pShwPaePd = pgmShwGetPaePDPtr(&pVM->pgm.s, (iPdPt << X86_PDPT_SHIFT)); 272 #ifdef VBOX_WITH_PGMPOOL_PAGING_ONLY 273 if (!pShwPaePd) 274 { 275 X86PDPE GstPdpe; 276 277 if (PGMGetGuestMode(pVM) < PGMMODE_PAE) 278 { 279 /* Fake PDPT entry; access control handled on the page table level, so allow everything. */ 280 GstPdpe.u = X86_PDPE_P; /* rw/us are reserved for PAE pdpte's; accessed bit causes invalid VT-x guest state errors */ 281 } 282 else 283 { 284 PX86PDPE pGstPdpe; 285 pGstPdpe = pgmGstGetPaePDPEPtr(&pVM->pgm.s, (iPdPt << X86_PDPT_SHIFT)); 286 AssertFatal(pGstPdpe); 287 GstPdpe = *pGstPdpe; 288 } 289 rc = pgmShwSyncPaePDPtr(pVM, (iPdPt << X86_PDPT_SHIFT), &GstPdpe, &pShwPaePd); 290 } 291 #endif 272 292 AssertFatal(pShwPaePd); 273 293
Note:
See TracChangeset
for help on using the changeset viewer.