VirtualBox

Changeset 24363 in vbox


Ignore:
Timestamp:
Nov 5, 2009 1:52:37 AM (15 years ago)
Author:
vboxsync
Message:

PGMSavedState: Save the RAM config (size + hole).

File:
1 edited

Legend:

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

    r24290 r24363  
    4848*******************************************************************************/
    4949/** Saved state data unit version. */
    50 #define PGM_SAVED_STATE_VERSION                 10
     50#define PGM_SAVED_STATE_VERSION                 11
     51/** Saved state data unit version used during 3.1 development, misses the RAM
     52 *  config. */
     53#define PGM_SAVED_STATE_VERSION_NO_RAM_CFG      10
    5154/** Saved state data unit version for 3.0 (pre teleportation). */
    5255#define PGM_SAVED_STATE_VERSION_3_0_0           9
     
    11261129    pgmUnlock(pVM);
    11271130
     1131    return VINF_SUCCESS;
     1132}
     1133
     1134
     1135/**
     1136 * Saves the RAM configuration.
     1137 * 
     1138 * @returns VBox status code.
     1139 * @param   pVM                 The VM handle.
     1140 * @param   pSSM                The saved state handle.
     1141 */
     1142static int pgmR3SaveRamConfig(PVM pVM, PSSMHANDLE pSSM)
     1143{
     1144    uint32_t cbRamHole = 0;
     1145    int rc = CFGMR3QueryU32Def(CFGMR3GetRoot(pVM), "RamHoleSize", &cbRamHole, MM_RAM_HOLE_SIZE_DEFAULT);
     1146    AssertRCReturn(rc, rc);
     1147
     1148    uint64_t cbRam     = 0;
     1149    rc = CFGMR3QueryU64Def(CFGMR3GetRoot(pVM), "RamSize", &cbRam, 0);
     1150    AssertRCReturn(rc, rc);
     1151
     1152    SSMR3PutU32(pSSM, cbRamHole);
     1153    return SSMR3PutU64(pSSM, cbRam);
     1154}
     1155
     1156
     1157/**
     1158 * Loads and verifies the RAM configuration.
     1159 * 
     1160 * @returns VBox status code.
     1161 * @param   pVM                 The VM handle.
     1162 * @param   pSSM                The saved state handle.
     1163 */
     1164static int pgmR3LoadRamConfig(PVM pVM, PSSMHANDLE pSSM)
     1165{
     1166    uint32_t cbRamHoleCfg = 0;
     1167    int rc = CFGMR3QueryU32Def(CFGMR3GetRoot(pVM), "RamHoleSize", &cbRamHoleCfg, MM_RAM_HOLE_SIZE_DEFAULT);
     1168    AssertRCReturn(rc, rc);
     1169
     1170    uint64_t cbRamCfg     = 0;
     1171    rc = CFGMR3QueryU64Def(CFGMR3GetRoot(pVM), "RamSize", &cbRamCfg, 0);
     1172    AssertRCReturn(rc, rc);
     1173
     1174    uint32_t cbRamHoleSaved;
     1175    SSMR3GetU32(pSSM, &cbRamHoleSaved);
     1176
     1177    uint64_t cbRamSaved;
     1178    rc = SSMR3GetU64(pSSM, &cbRamSaved);
     1179    AssertRCReturn(rc, rc);
     1180
     1181    if (   cbRamHoleCfg != cbRamHoleSaved
     1182        || cbRamCfg     != cbRamSaved)
     1183        return SSMR3SetCfgError(pSSM, RT_SRC_POS, N_("Ram config mismatch: saved=%RX64/%RX32 config=%RX64/%RX32 (RAM/Hole)"),
     1184                                cbRamSaved, cbRamHoleSaved, cbRamCfg, cbRamHoleCfg);
    11281185    return VINF_SUCCESS;
    11291186}
     
    16561713    if (uPass == 0)
    16571714    {
     1715        rc = pgmR3SaveRamConfig(pVM, pSSM);
     1716        if (RT_FAILURE(rc))
     1717            return rc;
    16581718        rc = pgmR3SaveRomRanges(pVM, pSSM);
    16591719        if (RT_FAILURE(rc))
     
    18471907        else
    18481908        {
    1849             rc = pgmR3SaveRomRanges(pVM, pSSM);
     1909            rc = pgmR3SaveRamConfig(pVM, pSSM);
     1910            if (RT_SUCCESS(rc))
     1911                rc = pgmR3SaveRomRanges(pVM, pSSM);
    18501912            if (RT_SUCCESS(rc))
    18511913                rc = pgmR3SaveMmio2Ranges(pVM, pSSM);
     
    27152777                break;
    27162778        if (!pMapping)
    2717             return SSMR3SetCfgError(pSSM, RT_SRC_POS, N_("Couldn't find mapping: cPTs=%x szDesc=%s (GCPtr=%RGv)"),
     2779            return SSMR3SetCfgError(pSSM, RT_SRC_POS, N_("Couldn't find mapping: cPTs=%#x szDesc=%s (GCPtr=%RGv)"),
    27182780                                    cPTs, szDesc, GCPtr);
    27192781
     
    27352797        if (!pVM->pgm.s.LiveSave.fActive)
    27362798        {
     2799            if (uVersion > PGM_SAVED_STATE_VERSION_NO_RAM_CFG)
     2800            {
     2801                rc = pgmR3LoadRamConfig(pVM, pSSM);
     2802                if (RT_FAILURE(rc))
     2803                    return rc;
     2804            }
    27372805            rc = pgmR3LoadRomRanges(pVM, pSSM);
    27382806            if (RT_FAILURE(rc))
     
    27672835     */
    27682836    if (   (   uPass != SSM_PASS_FINAL
    2769             && uVersion != PGM_SAVED_STATE_VERSION)
     2837            && uVersion != PGM_SAVED_STATE_VERSION
     2838            && uVersion != PGM_SAVED_STATE_VERSION_NO_RAM_CFG)
    27702839        || (   uVersion != PGM_SAVED_STATE_VERSION
     2840            && uVersion != PGM_SAVED_STATE_VERSION_NO_RAM_CFG
    27712841            && uVersion != PGM_SAVED_STATE_VERSION_3_0_0
    27722842            && uVersion != PGM_SAVED_STATE_VERSION_2_2_2
     
    27912861        {
    27922862            pVM->pgm.s.LiveSave.fActive = true;
    2793             rc = pgmR3LoadRomRanges(pVM, pSSM);
     2863            if (uVersion > PGM_SAVED_STATE_VERSION_NO_RAM_CFG)
     2864                rc = pgmR3LoadRamConfig(pVM, pSSM);
     2865            else
     2866                rc = VINF_SUCCESS;
     2867            if (RT_SUCCESS(rc))
     2868                rc = pgmR3LoadRomRanges(pVM, pSSM);
    27942869            if (RT_SUCCESS(rc))
    27952870                rc = pgmR3LoadMmio2Ranges(pVM, pSSM);
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