Changeset 17593 in vbox
- Timestamp:
- Mar 9, 2009 5:11:35 PM (16 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PGMMap.cpp
r17591 r17593 1156 1156 unsigned iPDSrc; 1157 1157 PX86PDPAE pPDSrc = pgmGstGetPaePDPtr(&pVM->pgm.s, (RTGCPTR32)iPDPTE << X86_PDPT_SHIFT, &iPDSrc, NULL); 1158 1159 /* It would be annoying to have to deal with a PD that isn't (yet) present in the guest PDPT. */1160 if (!pPDSrc)1161 continue;1162 1158 1163 1159 /* -
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r17592 r17593 914 914 if (CPUMGetGuestCR4(pVM) & X86_CR4_PAE) 915 915 { 916 AssertMsg(pGstPdpe->n.u1Present, ("GstPdpe=%RX64\n", pGstPdpe->u)); 917 GCPdPt = pGstPdpe->u & X86_PDPE_PG_MASK; 918 enmKind = PGMPOOLKIND_PAE_PD_FOR_PAE_PD; 916 if (!pGstPdpe->n.u1Present) 917 { 918 /* PD not present; guest must reload CR3 to change it. 919 * No need to monitor anything in this case. 920 */ 921 Assert(!HWACCMIsEnabled(pVM)); 922 923 GCPdPt = pGstPdpe->u & X86_PDPE_PG_MASK; 924 enmKind = PGMPOOLKIND_PAE_PD_PHYS; 925 pGstPdpe->n.u1Present = 1; 926 } 927 else 928 { 929 GCPdPt = pGstPdpe->u & X86_PDPE_PG_MASK; 930 enmKind = PGMPOOLKIND_PAE_PD_FOR_PAE_PD; 931 } 919 932 } 920 933 else … … 922 935 GCPdPt = CPUMGetGuestCR3(pVM); 923 936 enmKind = (PGMPOOLKIND)(PGMPOOLKIND_PAE_PD0_FOR_32BIT_PD + iPdPt); 924 Assert(pGstPdpe->n.u1Present);925 937 } 926 938 } -
trunk/src/VBox/VMM/VMMAll/PGMAllMap.cpp
r17591 r17593 283 283 PX86PDPE pGstPdpe; 284 284 pGstPdpe = pgmGstGetPaePDPEPtr(&pVM->pgm.s, (iPdPt << X86_PDPT_SHIFT)); 285 AssertFatal(pGstPdpe); 286 GstPdpe = *pGstPdpe; 285 if (pGstPdpe) 286 GstPdpe = *pGstPdpe; 287 else 288 GstPdpe.u = X86_PDPE_P; /* rw/us are reserved for PAE pdpte's; accessed bit causes invalid VT-x guest state errors */ 287 289 } 288 290 int rc = pgmShwSyncPaePDPtr(pVM, (iPdPt << X86_PDPT_SHIFT), &GstPdpe, &pShwPaePd);
Note:
See TracChangeset
for help on using the changeset viewer.