diff options
Diffstat (limited to 'src/sim/drain.hh')
-rw-r--r-- | src/sim/drain.hh | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/sim/drain.hh b/src/sim/drain.hh index 663946616..7ff1d6e2a 100644 --- a/src/sim/drain.hh +++ b/src/sim/drain.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2015 ARM Limited + * Copyright (c) 2012, 2015, 2017 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -58,7 +58,11 @@ class Drainable; * all objects have entered the Drained state. * * Before resuming simulation, the simulator calls resume() to - * transfer the object to the Running state. + * transfer the object to the Running state. This in turn results in a + * call to drainResume() for all Drainable objects in the + * simulator. New Drainable objects may be created while resuming. In + * such cases, the new objects will be created in the Resuming state + * and later resumed. * * \note Even though the state of an object (visible to the rest of * the world through Drainable::getState()) could be used to determine @@ -68,7 +72,8 @@ class Drainable; enum class DrainState { Running, /** Running normally */ Draining, /** Draining buffers pending serialization/handover */ - Drained /** Buffers drained, ready for serialization/handover */ + Drained, /** Buffers drained, ready for serialization/handover */ + Resuming, /** Transient state while the simulator is resuming */ }; #endif @@ -153,6 +158,12 @@ class DrainManager private: /** + * Helper function to check if all Drainable objects are in a + * specific state. + */ + bool allInState(DrainState state) const; + + /** * Thread-safe helper function to get the number of Drainable * objects in a system. */ @@ -261,6 +272,7 @@ class Drainable switch (_drainState) { case DrainState::Running: case DrainState::Drained: + case DrainState::Resuming: return; case DrainState::Draining: _drainState = DrainState::Drained; |