summaryrefslogtreecommitdiff
path: root/src/sim/drain.hh
diff options
context:
space:
mode:
authorAndreas Sandberg <Andreas.Sandberg@arm.com>2012-11-02 11:32:02 -0500
committerAndreas Sandberg <Andreas.Sandberg@arm.com>2012-11-02 11:32:02 -0500
commit050f24c7964cbe65633261e431e1105d1d5e8070 (patch)
treee4d2b820be4e83087b0b21164f528f494b501ad9 /src/sim/drain.hh
parentaae6134b5487e02a90445d1b2146583740658b09 (diff)
downloadgem5-050f24c7964cbe65633261e431e1105d1d5e8070.tar.xz
sim: Add drain methods to request additional cleanup operations
This patch adds the following two methods to the Drainable base class: memWriteback() - Write back all dirty cache lines to memory using functional accesses. memInvalidate() - Invalidate memory system buffers. Dirty data won't be written back. Specifying calling memWriteback() after draining will allow us to checkpoint systems with caches. memInvalidate() can be used to drop memory system buffers in preparation for switching to an accelerated CPU model that bypasses the gem5 memory system (e.g., hardware virtualized CPUs). Note: This patch only adds the methods to Drainable, the code for flushing the TLB and the cache is committed separately.
Diffstat (limited to 'src/sim/drain.hh')
-rw-r--r--src/sim/drain.hh23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/sim/drain.hh b/src/sim/drain.hh
index 252022bc7..2f5d2d965 100644
--- a/src/sim/drain.hh
+++ b/src/sim/drain.hh
@@ -202,6 +202,29 @@ class Drainable
*/
virtual void drainResume();
+ /**
+ * Write back dirty buffers to memory using functional writes.
+ *
+ * After returning, an object implementing this method should have
+ * written all its dirty data back to memory. This method is
+ * typically used to prepare a system with caches for
+ * checkpointing.
+ */
+ virtual void memWriteback() {};
+
+ /**
+ * Invalidate the contents of memory buffers.
+ *
+ * When the switching to hardware virtualized CPU models, we need
+ * to make sure that we don't have any cached state in the system
+ * that might become stale when we return. This method is used to
+ * flush all such state back to main memory.
+ *
+ * @warn This does <i>not</i> cause any dirty state to be written
+ * back to memory.
+ */
+ virtual void memInvalidate() {};
+
State getDrainState() const { return _drainState; }
protected: