Changeset 24363 in vbox
- Timestamp:
- Nov 5, 2009 1:52:37 AM (15 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/VMM/PGMSavedState.cpp (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PGMSavedState.cpp
r24290 r24363 48 48 *******************************************************************************/ 49 49 /** 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 51 54 /** Saved state data unit version for 3.0 (pre teleportation). */ 52 55 #define PGM_SAVED_STATE_VERSION_3_0_0 9 … … 1126 1129 pgmUnlock(pVM); 1127 1130 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 */ 1142 static 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 */ 1164 static 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); 1128 1185 return VINF_SUCCESS; 1129 1186 } … … 1656 1713 if (uPass == 0) 1657 1714 { 1715 rc = pgmR3SaveRamConfig(pVM, pSSM); 1716 if (RT_FAILURE(rc)) 1717 return rc; 1658 1718 rc = pgmR3SaveRomRanges(pVM, pSSM); 1659 1719 if (RT_FAILURE(rc)) … … 1847 1907 else 1848 1908 { 1849 rc = pgmR3SaveRomRanges(pVM, pSSM); 1909 rc = pgmR3SaveRamConfig(pVM, pSSM); 1910 if (RT_SUCCESS(rc)) 1911 rc = pgmR3SaveRomRanges(pVM, pSSM); 1850 1912 if (RT_SUCCESS(rc)) 1851 1913 rc = pgmR3SaveMmio2Ranges(pVM, pSSM); … … 2715 2777 break; 2716 2778 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)"), 2718 2780 cPTs, szDesc, GCPtr); 2719 2781 … … 2735 2797 if (!pVM->pgm.s.LiveSave.fActive) 2736 2798 { 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 } 2737 2805 rc = pgmR3LoadRomRanges(pVM, pSSM); 2738 2806 if (RT_FAILURE(rc)) … … 2767 2835 */ 2768 2836 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) 2770 2839 || ( uVersion != PGM_SAVED_STATE_VERSION 2840 && uVersion != PGM_SAVED_STATE_VERSION_NO_RAM_CFG 2771 2841 && uVersion != PGM_SAVED_STATE_VERSION_3_0_0 2772 2842 && uVersion != PGM_SAVED_STATE_VERSION_2_2_2 … … 2791 2861 { 2792 2862 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); 2794 2869 if (RT_SUCCESS(rc)) 2795 2870 rc = pgmR3LoadMmio2Ranges(pVM, pSSM);
Note:
See TracChangeset
for help on using the changeset viewer.

