main.cc (11153:20bbfe5b2b86) main.cc (11227:2659b1903b0f)
1/*
2 * Copyright (c) 2014 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 214 unchanged lines hidden (view full) ---

223 return EXIT_FAILURE;
224 }
225
226 GlobalSimLoopExitEvent *exit_event = NULL;
227
228 if (checkpoint_save) {
229 exit_event = simulate(pre_run_time);
230
1/*
2 * Copyright (c) 2014 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

--- 214 unchanged lines hidden (view full) ---

223 return EXIT_FAILURE;
224 }
225
226 GlobalSimLoopExitEvent *exit_event = NULL;
227
228 if (checkpoint_save) {
229 exit_event = simulate(pre_run_time);
230
231 DrainManager drain_manager;
232 unsigned int drain_count = 1;
233 do {
231 unsigned int drain_count = 1;
232 do {
234 drain_count = config_manager->drain(&drain_manager);
233 drain_count = config_manager->drain();
235
236 std::cerr << "Draining " << drain_count << '\n';
237
238 if (drain_count > 0) {
234
235 std::cerr << "Draining " << drain_count << '\n';
236
237 if (drain_count > 0) {
239 drain_manager.setCount(drain_count);
240 exit_event = simulate();
241 }
242 } while (drain_count > 0);
243
244 std::cerr << "Simulation stop at tick " << curTick()
245 << ", cause: " << exit_event->getCause() << '\n';
246
247 std::cerr << "Checkpointing\n";

--- 6 unchanged lines hidden (view full) ---

254 std::cerr << "Completed checkpoint\n";
255
256 config_manager->drainResume();
257 }
258
259 if (checkpoint_restore) {
260 std::cerr << "Restoring checkpoint\n";
261
238 exit_event = simulate();
239 }
240 } while (drain_count > 0);
241
242 std::cerr << "Simulation stop at tick " << curTick()
243 << ", cause: " << exit_event->getCause() << '\n';
244
245 std::cerr << "Checkpointing\n";

--- 6 unchanged lines hidden (view full) ---

252 std::cerr << "Completed checkpoint\n";
253
254 config_manager->drainResume();
255 }
256
257 if (checkpoint_restore) {
258 std::cerr << "Restoring checkpoint\n";
259
262 Checkpoint *checkpoint = new Checkpoint(checkpoint_dir,
260 CheckpointIn *checkpoint = new CheckpointIn(checkpoint_dir,
263 config_manager->getSimObjectResolver());
264
261 config_manager->getSimObjectResolver());
262
265 Serializable::unserializeGlobals(checkpoint);
266 config_manager->loadState(checkpoint);
263 DrainManager::instance().preCheckpointRestore();
264 Serializable::unserializeGlobals(*checkpoint);
265 config_manager->loadState(*checkpoint);
267 config_manager->startup();
268
269 config_manager->drainResume();
270
271 std::cerr << "Restored from checkpoint\n";
272 }
273
274 if (switch_cpus) {
275 exit_event = simulate(pre_switch_time);
276
277 std::cerr << "Switching CPU\n";
278
279 /* Assume the system is called system */
280 System &system = config_manager->getObject<System>("system");
281 BaseCPU &old_cpu = config_manager->getObject<BaseCPU>(from_cpu);
282 BaseCPU &new_cpu = config_manager->getObject<BaseCPU>(to_cpu);
283
266 config_manager->startup();
267
268 config_manager->drainResume();
269
270 std::cerr << "Restored from checkpoint\n";
271 }
272
273 if (switch_cpus) {
274 exit_event = simulate(pre_switch_time);
275
276 std::cerr << "Switching CPU\n";
277
278 /* Assume the system is called system */
279 System &system = config_manager->getObject<System>("system");
280 BaseCPU &old_cpu = config_manager->getObject<BaseCPU>(from_cpu);
281 BaseCPU &new_cpu = config_manager->getObject<BaseCPU>(to_cpu);
282
284 DrainManager drain_manager;
285 unsigned int drain_count = 1;
286 do {
283 unsigned int drain_count = 1;
284 do {
287 drain_count = config_manager->drain(&drain_manager);
285 drain_count = config_manager->drain();
288
289 std::cerr << "Draining " << drain_count << '\n';
290
291 if (drain_count > 0) {
286
287 std::cerr << "Draining " << drain_count << '\n';
288
289 if (drain_count > 0) {
292 drain_manager.setCount(drain_count);
293 exit_event = simulate();
294 }
295 } while (drain_count > 0);
296
297 old_cpu.switchOut();
298 system.setMemoryMode(Enums::timing);
299 new_cpu.takeOverFrom(&old_cpu);
300 config_manager->drainResume();

--- 19 unchanged lines hidden ---
290 exit_event = simulate();
291 }
292 } while (drain_count > 0);
293
294 old_cpu.switchOut();
295 system.setMemoryMode(Enums::timing);
296 new_cpu.takeOverFrom(&old_cpu);
297 config_manager->drainResume();

--- 19 unchanged lines hidden ---