VirtualBox

Changeset 41224 in vbox for trunk/src/VBox/VMM/VMMR0


Ignore:
Timestamp:
May 9, 2012 1:46:05 PM (13 years ago)
Author:
vboxsync
Message:

VMM/VMMR0/HWVMXR0: fix VERR_PAGE_TABLE_NOT_PRESENT guru with Intel with EPT+VPID enabled.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r41223 r41224  
    36373637        /* Handle the pagefault trap for the nested shadow table. */
    36383638        rc = PGMR0Trap0eHandlerNestedPaging(pVM, pVCpu, PGMMODE_EPT, errCode, CPUMCTX2CORE(pCtx), GCPhys);
    3639         if (rc == VINF_SUCCESS)
     3639
     3640        /*
     3641         * Same case as PGMR0Trap0eHandlerNPMisconfig(). See comment below, @bugref{6043}.
     3642         */
     3643        if (   rc == VINF_SUCCESS
     3644            || rc == VERR_PAGE_TABLE_NOT_PRESENT
     3645            || rc == VERR_PAGE_NOT_PRESENT)
    36403646        {   /* We've successfully synced our shadow pages, so let's just continue execution. */
    36413647            Log2(("Shadow page fault at %RGv cr2=%RGp error code %x\n", (RTGCPTR)pCtx->rip, exitQualification , errCode));
     
    36453651            goto ResumeExecution;
    36463652        }
    3647         /** @todo We probably should handle failure to get the instruction page
    3648          *        (VERR_PAGE_NOT_PRESENT, VERR_PAGE_TABLE_NOT_PRESENT). See
    3649          *        @bugref{6043}. */
    36503653
    36513654#ifdef VBOX_STRICT
     
    36863689
    36873690        rc = PGMR0Trap0eHandlerNPMisconfig(pVM, pVCpu, PGMMODE_EPT, CPUMCTX2CORE(pCtx), GCPhys, UINT32_MAX);
    3688         if (rc == VINF_SUCCESS)
     3691
     3692        /*
     3693         * If we succeed, resume execution.
     3694         * Or, if fail in interpreting the instruction because we couldn't get the guest physical address
     3695         * of the page containing the instruction via the guest's page tables (we would invalidate the guest page
     3696         * in the host TLB), resume execution which would cause a guest page fault to let the guest handle this
     3697         * weird case. See @bugref{6043}.
     3698         */
     3699        if (   rc == VINF_SUCCESS
     3700            || rc == VERR_PAGE_TABLE_NOT_PRESENT
     3701            || rc == VERR_PAGE_NOT_PRESENT)
    36893702        {
    36903703            Log2(("PGMR0Trap0eHandlerNPMisconfig(,,,%RGp) at %RGv -> resume\n", GCPhys, (RTGCPTR)pCtx->rip));
    36913704            goto ResumeExecution;
    36923705        }
    3693         /** @todo We probably should handle failure to get the instruction page
    3694          *        (VERR_PAGE_NOT_PRESENT, VERR_PAGE_TABLE_NOT_PRESENT). See
    3695          *        @bugref{6043}. */
    36963706
    36973707        Log2(("PGMR0Trap0eHandlerNPMisconfig(,,,%RGp) at %RGv -> %Rrc\n", GCPhys, (RTGCPTR)pCtx->rip, VBOXSTRICTRC_VAL(rc)));
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