VirtualBox

Changeset 17195 in vbox for trunk


Ignore:
Timestamp:
Feb 27, 2009 11:02:41 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
43486
Message:

VBOX_WITH_PGMPOOL_PAGING_ONLY: deal with hypervisor mappings in guest pae pds that are not yet present

Location:
trunk/src/VBox/VMM/VMMAll
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PGMAll.cpp

    r17179 r17195  
    902902            if (CPUMGetGuestCR4(pVM) & X86_CR4_PAE)
    903903            {
    904                 GCPdPt  = pGstPdpe->u & X86_PDPE_PG_MASK;
    905                 enmKind = PGMPOOLKIND_PAE_PD_FOR_PAE_PD;
     904                if (!pGstPdpe->n.u1Present)
     905                {
     906                    /* PD not present; guest must reload CR3 to change it.
     907                     * No need to monitor anything in this case.
     908                     */
     909                    Assert(!HWACCMIsEnabled(pVM));
     910
     911                    GCPdPt  = pGstPdpe->u & X86_PDPE_PG_MASK;
     912                    enmKind = PGMPOOLKIND_PAE_PD_PHYS;
     913                    pGstPdpe->n.u1Present = 1;
     914                }
     915                else
     916                {
     917                    GCPdPt  = pGstPdpe->u & X86_PDPE_PG_MASK;
     918                    enmKind = PGMPOOLKIND_PAE_PD_FOR_PAE_PD;
     919                }
    906920            }
    907921            else
  • trunk/src/VBox/VMM/VMMAll/PGMAllMap.cpp

    r17140 r17195  
    280280                    {
    281281                        /* Fake PDPT entry; access control handled on the page table level, so allow everything. */
    282                         GstPdpe.u  = X86_PDPE_P;   /* rw/us are reserved for PAE pdpte's; accessed bit causes invalid VT-x guest state errors */
     282                        GstPdpe.u = X86_PDPE_P;   /* rw/us are reserved for PAE pdpte's; accessed bit causes invalid VT-x guest state errors */
    283283                    }
    284284                    else
     
    289289                            GstPdpe = *pGstPdpe;
    290290                        else
    291                             GstPdpe.u  = X86_PDPE_P;   /* rw/us are reserved for PAE pdpte's; accessed bit causes invalid VT-x guest state errors */
     291                            GstPdpe.u = X86_PDPE_P;   /* rw/us are reserved for PAE pdpte's; accessed bit causes invalid VT-x guest state errors */
    292292                    }
    293293                    int rc = pgmShwSyncPaePDPtr(pVM, (iPdPt << X86_PDPT_SHIFT), &GstPdpe, &pShwPaePd);
Note: See TracChangeset for help on using the changeset viewer.

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