VirtualBox

Changeset 73199 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Jul 18, 2018 12:13:55 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
123804
Message:

PGM: Working on eliminating PGMMODEDATA and the corresponding PGMCPU section so we can do mode switching in ring-0. This first part deals with guest mode specific pointers. bugref:9044

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/PGM.cpp

    r73097 r73199  
    12791279        pPGM->offPGM     = (uintptr_t)&pVCpu->pgm.s - (uintptr_t)&pVM->pgm.s;
    12801280
    1281         pPGM->enmShadowMode    = PGMMODE_INVALID;
    1282         pPGM->enmGuestMode     = PGMMODE_INVALID;
    1283 
    1284         pPGM->GCPhysCR3        = NIL_RTGCPHYS;
    1285 
    1286         pPGM->pGst32BitPdR3    = NULL;
    1287         pPGM->pGstPaePdptR3    = NULL;
    1288         pPGM->pGstAmd64Pml4R3  = NULL;
     1281        pPGM->enmShadowMode     = PGMMODE_INVALID;
     1282        pPGM->enmGuestMode      = PGMMODE_INVALID;
     1283        pPGM->idxGuestModeData  = UINT8_MAX;
     1284        pPGM->idxShadowModeData = UINT8_MAX;
     1285        pPGM->idxBothModeData   = UINT8_MAX;
     1286
     1287        pPGM->GCPhysCR3         = NIL_RTGCPHYS;
     1288
     1289        pPGM->pGst32BitPdR3     = NULL;
     1290        pPGM->pGstPaePdptR3     = NULL;
     1291        pPGM->pGstAmd64Pml4R3   = NULL;
    12891292#ifndef VBOX_WITH_2X_4GB_ADDR_SPACE
    1290         pPGM->pGst32BitPdR0    = NIL_RTR0PTR;
    1291         pPGM->pGstPaePdptR0    = NIL_RTR0PTR;
    1292         pPGM->pGstAmd64Pml4R0  = NIL_RTR0PTR;
     1293        pPGM->pGst32BitPdR0     = NIL_RTR0PTR;
     1294        pPGM->pGstPaePdptR0     = NIL_RTR0PTR;
     1295        pPGM->pGstAmd64Pml4R0   = NIL_RTR0PTR;
    12931296#endif
    1294         pPGM->pGst32BitPdRC    = NIL_RTRCPTR;
    1295         pPGM->pGstPaePdptRC    = NIL_RTRCPTR;
     1297        pPGM->pGst32BitPdRC     = NIL_RTRCPTR;
     1298        pPGM->pGstPaePdptRC     = NIL_RTRCPTR;
    12961299        for (unsigned i = 0; i < RT_ELEMENTS(pVCpu->pgm.s.apGstPaePDsR3); i++)
    12971300        {
     
    15651568        PVMCPU pVCpu = &pVM->aCpus[i];
    15661569
    1567         pVCpu->pgm.s.enmShadowMode = PGMMODE_INVALID;
    1568         pVCpu->pgm.s.enmGuestMode  = PGMMODE_INVALID;
     1570        pVCpu->pgm.s.enmShadowMode     = PGMMODE_INVALID;
     1571        pVCpu->pgm.s.enmGuestMode      = PGMMODE_INVALID;
     1572        pVCpu->pgm.s.idxGuestModeData  = UINT8_MAX;
     1573        pVCpu->pgm.s.idxShadowModeData = UINT8_MAX;
     1574        pVCpu->pgm.s.idxBothModeData   = UINT8_MAX;
    15691575    }
    15701576
     
    23502356
    23512357        PGM_SHW_PFN(Relocate, pVCpu)(pVCpu, offDelta);
    2352         PGM_GST_PFN(Relocate, pVCpu)(pVCpu, offDelta);
     2358
     2359        uintptr_t const idxGst = pVCpu->pgm.s.idxGuestModeData;
     2360        if (   idxGst < RT_ELEMENTS(g_aPgmGuestModeData)
     2361            && g_aPgmGuestModeData[idxGst].pfnRelocate)
     2362            g_aPgmGuestModeData[idxGst].pfnRelocate(pVCpu, offDelta);
     2363
    23532364        PGM_BTH_PFN(Relocate, pVCpu)(pVCpu, offDelta);
    23542365    }
     
    25472558VMMR3DECL(void) PGMR3ResetCpu(PVM pVM, PVMCPU pVCpu)
    25482559{
    2549     int rc = PGM_GST_PFN(Exit, pVCpu)(pVCpu);
    2550     AssertRC(rc);
     2560    uintptr_t const idxGst = pVCpu->pgm.s.idxGuestModeData;
     2561    if (   idxGst < RT_ELEMENTS(g_aPgmGuestModeData)
     2562        && g_aPgmGuestModeData[idxGst].pfnExit)
     2563    {
     2564        int rc = g_aPgmGuestModeData[idxGst].pfnExit(pVCpu);
     2565        AssertReleaseRC(rc);
     2566    }
    25512567    pVCpu->pgm.s.GCPhysCR3 = NIL_RTGCPHYS;
    25522568
    2553     rc = PGMR3ChangeMode(pVM, pVCpu, PGMMODE_REAL);
    2554     AssertRC(rc);
     2569    int rc = PGMR3ChangeMode(pVM, pVCpu, PGMMODE_REAL);
     2570    AssertReleaseRC(rc);
    25552571
    25562572    STAM_REL_COUNTER_RESET(&pVCpu->pgm.s.cGuestModeChanges);
     
    26012617    for (VMCPUID i = 0; i < pVM->cCpus; i++)
    26022618    {
    2603         PVMCPU  pVCpu = &pVM->aCpus[i];
    2604         int rc = PGM_GST_PFN(Exit, pVCpu)(pVCpu);
    2605         AssertReleaseRC(rc);
     2619        PVMCPU          pVCpu  = &pVM->aCpus[i];
     2620        uintptr_t const idxGst = pVCpu->pgm.s.idxGuestModeData;
     2621        if (   idxGst < RT_ELEMENTS(g_aPgmGuestModeData)
     2622            && g_aPgmGuestModeData[idxGst].pfnExit)
     2623        {
     2624            int rc = g_aPgmGuestModeData[idxGst].pfnExit(pVCpu);
     2625            AssertReleaseRC(rc);
     2626        }
    26062627        pVCpu->pgm.s.GCPhysCR3 = NIL_RTGCPHYS;
    26072628    }
     
    26132634
    26142635    /*
    2615      * Switch mode back to real mode. (before resetting the pgm pool!)
     2636     * Switch mode back to real mode. (Before resetting the pgm pool!)
    26162637     */
    26172638    for (VMCPUID i = 0; i < pVM->cCpus; i++)
     
    27832804            default:                                psz = "unknown"; break;
    27842805        }
    2785         pHlp->pfnPrintf(pHlp, "Host paging mode:              %s\n", psz);
     2806        pHlp->pfnPrintf(pHlp, "Host paging mode:             %s\n", psz);
    27862807    }
    27872808}
     
    30583079    pModeData->uGstType = PGM_TYPE_REAL;
    30593080    rc = PGM_SHW_NAME_32BIT(InitData)(      pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3060     rc = PGM_GST_NAME_REAL(InitData)(       pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    30613081    rc = PGM_BTH_NAME_32BIT_REAL(InitData)( pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    30623082
     
    30653085    pModeData->uGstType = PGM_TYPE_PROT;
    30663086    rc = PGM_SHW_NAME_32BIT(InitData)(      pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3067     rc = PGM_GST_NAME_PROT(InitData)(       pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    30683087    rc = PGM_BTH_NAME_32BIT_PROT(InitData)( pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    30693088
     
    30723091    pModeData->uGstType = PGM_TYPE_32BIT;
    30733092    rc = PGM_SHW_NAME_32BIT(InitData)(      pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3074     rc = PGM_GST_NAME_32BIT(InitData)(      pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    30753093    rc = PGM_BTH_NAME_32BIT_32BIT(InitData)(pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    30763094
     
    30793097    pModeData->uGstType = PGM_TYPE_REAL;
    30803098    rc = PGM_SHW_NAME_PAE(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3081     rc = PGM_GST_NAME_REAL(InitData)(       pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    30823099    rc = PGM_BTH_NAME_PAE_REAL(InitData)(   pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    30833100
     
    30863103    pModeData->uGstType = PGM_TYPE_PROT;
    30873104    rc = PGM_SHW_NAME_PAE(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3088     rc = PGM_GST_NAME_PROT(InitData)(       pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    30893105    rc = PGM_BTH_NAME_PAE_PROT(InitData)(   pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    30903106
     
    30933109    pModeData->uGstType = PGM_TYPE_32BIT;
    30943110    rc = PGM_SHW_NAME_PAE(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3095     rc = PGM_GST_NAME_32BIT(InitData)(      pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    30963111    rc = PGM_BTH_NAME_PAE_32BIT(InitData)(  pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    30973112
     
    31003115    pModeData->uGstType = PGM_TYPE_PAE;
    31013116    rc = PGM_SHW_NAME_PAE(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3102     rc = PGM_GST_NAME_PAE(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31033117    rc = PGM_BTH_NAME_PAE_PAE(InitData)(    pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31043118
     
    31083122    pModeData->uGstType = PGM_TYPE_AMD64;
    31093123    rc = PGM_SHW_NAME_AMD64(InitData)(       pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3110     rc = PGM_GST_NAME_AMD64(InitData)(       pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31113124    rc = PGM_BTH_NAME_AMD64_AMD64(InitData)( pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31123125#endif
     
    31163129    pModeData->uShwType = PGM_TYPE_NESTED;
    31173130    pModeData->uGstType = PGM_TYPE_REAL;
    3118     rc = PGM_GST_NAME_REAL(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31193131    rc = PGM_BTH_NAME_NESTED_REAL(InitData)( pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31203132
     
    31223134    pModeData->uShwType = PGM_TYPE_NESTED;
    31233135    pModeData->uGstType = PGM_TYPE_PROT;
    3124     rc = PGM_GST_NAME_PROT(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31253136    rc = PGM_BTH_NAME_NESTED_PROT(InitData)( pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31263137
     
    31283139    pModeData->uShwType = PGM_TYPE_NESTED;
    31293140    pModeData->uGstType = PGM_TYPE_32BIT;
    3130     rc = PGM_GST_NAME_32BIT(InitData)(       pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31313141    rc = PGM_BTH_NAME_NESTED_32BIT(InitData)(pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31323142
     
    31343144    pModeData->uShwType = PGM_TYPE_NESTED;
    31353145    pModeData->uGstType = PGM_TYPE_PAE;
    3136     rc = PGM_GST_NAME_PAE(InitData)(         pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31373146    rc = PGM_BTH_NAME_NESTED_PAE(InitData)(  pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31383147
     
    31413150    pModeData->uShwType = PGM_TYPE_NESTED;
    31423151    pModeData->uGstType = PGM_TYPE_AMD64;
    3143     rc = PGM_GST_NAME_AMD64(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31443152    rc = PGM_BTH_NAME_NESTED_AMD64(InitData)( pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    31453153#endif
     
    32053213    pModeData->uGstType = PGM_TYPE_REAL;
    32063214    rc = PGM_SHW_NAME_EPT(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3207     rc = PGM_GST_NAME_REAL(InitData)(       pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    32083215    rc = PGM_BTH_NAME_EPT_REAL(InitData)(   pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    32093216
     
    32123219    pModeData->uGstType = PGM_TYPE_PROT;
    32133220    rc = PGM_SHW_NAME_EPT(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3214     rc = PGM_GST_NAME_PROT(InitData)(       pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    32153221    rc = PGM_BTH_NAME_EPT_PROT(InitData)(   pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    32163222
     
    32193225    pModeData->uGstType = PGM_TYPE_32BIT;
    32203226    rc = PGM_SHW_NAME_EPT(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3221     rc = PGM_GST_NAME_32BIT(InitData)(      pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    32223227    rc = PGM_BTH_NAME_EPT_32BIT(InitData)(  pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    32233228
     
    32263231    pModeData->uGstType = PGM_TYPE_PAE;
    32273232    rc = PGM_SHW_NAME_EPT(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3228     rc = PGM_GST_NAME_PAE(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    32293233    rc = PGM_BTH_NAME_EPT_PAE(InitData)(    pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    32303234
     
    32343238    pModeData->uGstType = PGM_TYPE_AMD64;
    32353239    rc = PGM_SHW_NAME_EPT(InitData)(        pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    3236     rc = PGM_GST_NAME_AMD64(InitData)(      pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    32373240    rc = PGM_BTH_NAME_EPT_AMD64(InitData)(  pVM, pModeData, fResolveGCAndR0); AssertRCReturn(rc, rc);
    32383241#endif
     
    32513254static void pgmR3ModeDataSwitch(PVM pVM, PVMCPU pVCpu, PGMMODE enmShw, PGMMODE enmGst)
    32523255{
     3256    /*
     3257     * Update the indexes.
     3258     */
     3259    uintptr_t idxGst = pVCpu->pgm.s.idxGuestModeData = pgmModeToType(enmGst);
     3260    Assert(g_aPgmGuestModeData[idxGst].uType == idxGst);
     3261    AssertPtr(g_aPgmGuestModeData[idxGst].pfnGetPage);
     3262    AssertPtr(g_aPgmGuestModeData[idxGst].pfnModifyPage);
     3263    AssertPtr(g_aPgmGuestModeData[idxGst].pfnGetPDE);
     3264    AssertPtr(g_aPgmGuestModeData[idxGst].pfnExit);
     3265    AssertPtr(g_aPgmGuestModeData[idxGst].pfnEnter);
     3266    AssertPtr(g_aPgmGuestModeData[idxGst].pfnRelocate);
     3267    NOREF(idxGst);
     3268
     3269    pVCpu->pgm.s.idxShadowModeData = pgmModeToType(enmShw);
     3270    pVCpu->pgm.s.idxBothModeData   = pgmModeDataIndexByMode(enmShw, enmGst);
     3271
     3272    /*
     3273     * The following code will be gradually reduced and finally removed:
     3274     */
    32533275    PPGMMODEDATA pModeData = &pVM->pgm.s.paModeData[pgmModeDataIndexByMode(enmShw, enmGst)];
    32543276
     
    32683290    pVCpu->pgm.s.pfnR0ShwGetPage              = pModeData->pfnR0ShwGetPage;
    32693291    pVCpu->pgm.s.pfnR0ShwModifyPage           = pModeData->pfnR0ShwModifyPage;
    3270 
    3271 
    3272     /* guest */
    3273     pVCpu->pgm.s.pfnR3GstRelocate             = pModeData->pfnR3GstRelocate;
    3274     pVCpu->pgm.s.pfnR3GstExit                 = pModeData->pfnR3GstExit;
    3275     pVCpu->pgm.s.pfnR3GstGetPage              = pModeData->pfnR3GstGetPage;
    3276     pVCpu->pgm.s.pfnR3GstModifyPage           = pModeData->pfnR3GstModifyPage;
    3277     pVCpu->pgm.s.pfnR3GstGetPDE               = pModeData->pfnR3GstGetPDE;
    3278     pVCpu->pgm.s.pfnRCGstGetPage              = pModeData->pfnRCGstGetPage;
    3279     pVCpu->pgm.s.pfnRCGstModifyPage           = pModeData->pfnRCGstModifyPage;
    3280     pVCpu->pgm.s.pfnRCGstGetPDE               = pModeData->pfnRCGstGetPDE;
    3281     pVCpu->pgm.s.pfnR0GstGetPage              = pModeData->pfnR0GstGetPage;
    3282     pVCpu->pgm.s.pfnR0GstModifyPage           = pModeData->pfnR0GstModifyPage;
    3283     pVCpu->pgm.s.pfnR0GstGetPDE               = pModeData->pfnR0GstGetPDE;
    3284     Assert(pVCpu->pgm.s.pfnR3GstGetPage);
    32853292
    32863293    /* both */
     
    35963603
    35973604    /* guest */
    3598     if (PGM_GST_PFN(Exit, pVCpu))
    3599     {
    3600         int rc = PGM_GST_PFN(Exit, pVCpu)(pVCpu);
    3601         if (RT_FAILURE(rc))
    3602         {
    3603             AssertMsgFailed(("Exit failed for guest mode %d: %Rrc\n", pVCpu->pgm.s.enmGuestMode, rc));
    3604             return rc;
    3605         }
     3605    uintptr_t const idxOldGst = pVCpu->pgm.s.idxGuestModeData;
     3606    if (   idxOldGst < RT_ELEMENTS(g_aPgmGuestModeData)
     3607        && g_aPgmGuestModeData[idxOldGst].pfnExit)
     3608    {
     3609        int rc = g_aPgmGuestModeData[idxOldGst].pfnExit(pVCpu);
     3610        AssertMsgReturn(RT_SUCCESS(rc), ("Exit failed for guest mode %d: %Rrc\n", pVCpu->pgm.s.enmGuestMode, rc), rc);
    36063611    }
    36073612    pVCpu->pgm.s.GCPhysCR3 = NIL_RTGCPHYS;
  • trunk/src/VBox/VMM/VMMR3/PGMGst.h

    r70948 r73199  
    2222RT_C_DECLS_BEGIN
    2323/* r3 */
    24 PGM_GST_DECL(int, InitData)(PVM pVM, PPGMMODEDATA pModeData, bool fResolveGCAndR0);
    2524PGM_GST_DECL(int, Enter)(PVMCPU pVCpu, RTGCPHYS GCPhysCR3);
    2625PGM_GST_DECL(int, Relocate)(PVMCPU pVCpu, RTGCPTR offDelta);
     
    3231PGM_GST_DECL(int, GetPDE)(PVMCPU pVCpu, RTGCPTR GCPtr, PX86PDEPAE pPDE);
    3332RT_C_DECLS_END
    34 
    35 
    36 /**
    37  * Initializes the guest bit of the paging mode data.
    38  *
    39  * @returns VBox status code.
    40  * @param   pVM             The cross context VM structure.
    41  * @param   pModeData       The pointer table to initialize (our members only).
    42  * @param   fResolveGCAndR0 Indicate whether or not GC and Ring-0 symbols can be resolved now.
    43  *                          This is used early in the init process to avoid trouble with PDM
    44  *                          not being initialized yet.
    45  */
    46 PGM_GST_DECL(int, InitData)(PVM pVM, PPGMMODEDATA pModeData, bool fResolveGCAndR0)
    47 {
    48     Assert(pModeData->uGstType == PGM_GST_TYPE);
    49 
    50     /* Ring-3 */
    51     pModeData->pfnR3GstRelocate           = PGM_GST_NAME(Relocate);
    52     pModeData->pfnR3GstExit               = PGM_GST_NAME(Exit);
    53     pModeData->pfnR3GstGetPDE             = PGM_GST_NAME(GetPDE);
    54     pModeData->pfnR3GstGetPage            = PGM_GST_NAME(GetPage);
    55     pModeData->pfnR3GstModifyPage         = PGM_GST_NAME(ModifyPage);
    56 
    57     if (fResolveGCAndR0)
    58     {
    59         int rc;
    60 
    61         if (VM_IS_RAW_MODE_ENABLED(pVM))
    62         {
    63 #if PGM_SHW_TYPE != PGM_TYPE_AMD64 /* No AMD64 for traditional virtualization, only VT-x and AMD-V. */
    64             /* RC */
    65             rc = PDMR3LdrGetSymbolRC(pVM, NULL,       PGM_GST_NAME_RC_STR(GetPage),          &pModeData->pfnRCGstGetPage);
    66             AssertMsgRCReturn(rc, ("%s -> rc=%Rrc\n", PGM_GST_NAME_RC_STR(GetPage),  rc), rc);
    67             rc = PDMR3LdrGetSymbolRC(pVM, NULL,       PGM_GST_NAME_RC_STR(ModifyPage),       &pModeData->pfnRCGstModifyPage);
    68             AssertMsgRCReturn(rc, ("%s -> rc=%Rrc\n", PGM_GST_NAME_RC_STR(ModifyPage),  rc), rc);
    69             rc = PDMR3LdrGetSymbolRC(pVM, NULL,       PGM_GST_NAME_RC_STR(GetPDE),           &pModeData->pfnRCGstGetPDE);
    70             AssertMsgRCReturn(rc, ("%s -> rc=%Rrc\n", PGM_GST_NAME_RC_STR(GetPDE), rc), rc);
    71 #endif /* Not AMD64 shadow paging. */
    72         }
    73 
    74         /* Ring-0 */
    75         rc = PDMR3LdrGetSymbolR0(pVM, NULL,       PGM_GST_NAME_R0_STR(GetPage),          &pModeData->pfnR0GstGetPage);
    76         AssertMsgRCReturn(rc, ("%s -> rc=%Rrc\n", PGM_GST_NAME_R0_STR(GetPage),  rc), rc);
    77         rc = PDMR3LdrGetSymbolR0(pVM, NULL,       PGM_GST_NAME_R0_STR(ModifyPage),       &pModeData->pfnR0GstModifyPage);
    78         AssertMsgRCReturn(rc, ("%s -> rc=%Rrc\n", PGM_GST_NAME_R0_STR(ModifyPage),  rc), rc);
    79         rc = PDMR3LdrGetSymbolR0(pVM, NULL,       PGM_GST_NAME_R0_STR(GetPDE),           &pModeData->pfnR0GstGetPDE);
    80         AssertMsgRCReturn(rc, ("%s -> rc=%Rrc\n", PGM_GST_NAME_R0_STR(GetPDE), rc), rc);
    81     }
    82 
    83     return VINF_SUCCESS;
    84 }
    8533
    8634
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