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 --- |