VirtualBox

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


Ignore:
Timestamp:
Jul 8, 2022 3:01:07 PM (3 years ago)
Author:
vboxsync
Message:

VMM/PGM: Fixed issues saving and restoring inactive shadow ROM pages when in NEM mode. bugref:10122

File:
1 edited

Legend:

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

    r93922 r95571  
    467467            {
    468468                void const *pvPage;
    469                 rc = pgmPhysPageMapReadOnly(pVM, pPage, GCPhys, &pvPage);
     469#ifdef VBOX_WITH_PGM_NEM_MODE
     470                if (!PGMROMPROT_IS_ROM(enmProt))
     471                    pvPage = &pRom->pbR3Alternate[iPage << GUEST_PAGE_SHIFT];
     472                else
     473#endif
     474                    rc = pgmPhysPageMapReadOnly(pVM, pPage, GCPhys, &pvPage);
    470475                if (RT_SUCCESS(rc))
    471476                    memcpy(abPage, pvPage, GUEST_PAGE_SIZE);
     
    553558                    {
    554559                        void const *pvPage;
    555                         rc = pgmPhysPageMapReadOnly(pVM, pPage, GCPhys, &pvPage);
     560#ifdef VBOX_WITH_PGM_NEM_MODE
     561                        if (PGMROMPROT_IS_ROM(enmProt))
     562                            pvPage = &pRom->pbR3Alternate[iPage << GUEST_PAGE_SHIFT];
     563                        else
     564#endif
     565                            rc = pgmPhysPageMapReadOnly(pVM, pPage, GCPhys, &pvPage);
    556566                        if (RT_SUCCESS(rc))
    557567                            memcpy(abPage, pvPage, GUEST_PAGE_SIZE);
     
    28822892                    default: AssertLogRelFailedReturn(VERR_IPE_NOT_REACHED_DEFAULT_CASE); /* shut up gcc */
    28832893                }
     2894#ifdef VBOX_WITH_PGM_NEM_MODE
     2895                bool const fAltPage = pRealPage != NULL;
     2896#endif
    28842897                if (!pRealPage)
    28852898                {
     
    29022915                    case PGM_STATE_REC_ROM_VIRGIN:
    29032916                    case PGM_STATE_REC_ROM_SHW_RAW:
    2904                     {
    2905                         rc = pgmPhysPageMakeWritableAndMap(pVM, pRealPage, GCPhys, &pvDstPage);
    2906                         AssertLogRelMsgRCReturn(rc, ("GCPhys=%RGp rc=%Rrc\n", GCPhys, rc), rc);
     2917#ifdef VBOX_WITH_PGM_NEM_MODE
     2918                        if (fAltPage)
     2919                            pvDstPage = &pRom->pbR3Alternate[iPage << GUEST_PAGE_SHIFT];
     2920                        else
     2921#endif
     2922                        {
     2923                            rc = pgmPhysPageMakeWritableAndMap(pVM, pRealPage, GCPhys, &pvDstPage);
     2924                            AssertLogRelMsgRCReturn(rc, ("GCPhys=%RGp rc=%Rrc\n", GCPhys, rc), rc);
     2925                        }
    29072926                        break;
    2908                     }
    29092927                }
    29102928
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