VirtualBox

Changeset 17593 in vbox


Ignore:
Timestamp:
Mar 9, 2009 5:11:35 PM (16 years ago)
Author:
vboxsync
Message:

Backed out 44052

Location:
trunk/src/VBox/VMM
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PGMMap.cpp

    r17591 r17593  
    11561156        unsigned  iPDSrc;
    11571157        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;
    11621158
    11631159        /*
  • trunk/src/VBox/VMM/VMMAll/PGMAll.cpp

    r17592 r17593  
    914914            if (CPUMGetGuestCR4(pVM) & X86_CR4_PAE)
    915915            {
    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                }
    919932            }
    920933            else
     
    922935                GCPdPt  = CPUMGetGuestCR3(pVM);
    923936                enmKind = (PGMPOOLKIND)(PGMPOOLKIND_PAE_PD0_FOR_32BIT_PD + iPdPt);
    924                 Assert(pGstPdpe->n.u1Present);
    925937            }
    926938        }
  • trunk/src/VBox/VMM/VMMAll/PGMAllMap.cpp

    r17591 r17593  
    283283                        PX86PDPE pGstPdpe;
    284284                        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 */
    287289                    }
    288290                    int rc = pgmShwSyncPaePDPtr(pVM, (iPdPt << X86_PDPT_SHIFT), &GstPdpe, &pShwPaePd);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette