changeset dc04d655315a in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=dc04d655315a
summary: physmem:  Add a null option to physical memory so it doesn't store 
data.

diffstat:

1 file changed, 3 insertions(+), 2 deletions(-)
src/mem/physical.cc |    5 +++--

diffs (113 lines):

diff -r 758c2413765a -r dc04d655315a src/mem/PhysicalMemory.py
--- a/src/mem/PhysicalMemory.py Sun Jun 15 21:34:32 2008 -0700
+++ b/src/mem/PhysicalMemory.py Sun Jun 15 21:39:29 2008 -0700
@@ -38,6 +38,7 @@ class PhysicalMemory(MemObject):
     latency = Param.Latency('1t', "latency of an access")
     latency_var = Param.Latency('0ns', "access variablity")
     zero = Param.Bool(False, "zero initialize memory")
+    null = Param.Bool(False, "do not store data, always return zero")
 
 class DRAMMemory(PhysicalMemory):
     type = 'DRAMMemory'
diff -r 758c2413765a -r dc04d655315a src/mem/physical.cc
--- a/src/mem/physical.cc       Sun Jun 15 21:34:32 2008 -0700
+++ b/src/mem/physical.cc       Sun Jun 15 21:39:29 2008 -0700
@@ -52,11 +52,15 @@ using namespace TheISA;
 using namespace TheISA;
 
 PhysicalMemory::PhysicalMemory(const Params *p)
-    : MemObject(p), pmemAddr(NULL), lat(p->latency),
-      lat_var(p->latency_var)
+    : MemObject(p), pmemAddr(NULL), pagePtr(0),
+      lat(p->latency), lat_var(p->latency_var),
+      cachedSize(params()->range.size()), cachedStart(params()->range.start)
 {
     if (params()->range.size() % TheISA::PageBytes != 0)
         panic("Memory Size not divisible by page size\n");
+
+    if (params()->null)
+        return;
 
     int map_flags = MAP_ANON | MAP_PRIVATE;
     pmemAddr = (uint8_t *)mmap(NULL, params()->range.size(),
@@ -70,12 +74,6 @@ PhysicalMemory::PhysicalMemory(const Par
     //If requested, initialize all the memory to 0
     if (p->zero)
         memset(pmemAddr, 0, p->range.size());
-
-    pagePtr = 0;
-
-    cachedSize = params()->range.size();
-    cachedStart = params()->range.start;
-
 }
 
 void
@@ -257,6 +255,8 @@ PhysicalMemory::doAtomicAccess(PacketPtr
         uint64_t condition_val64;
         uint32_t condition_val32;
 
+        if (!pmemAddr)
+            panic("Swap only works if there is real memory (i.e. null=False)");
         assert(sizeof(IntReg) >= pkt->getSize());
 
         overwrite_mem = true;
@@ -287,11 +287,13 @@ PhysicalMemory::doAtomicAccess(PacketPtr
         if (pkt->isLocked()) {
             trackLoadLocked(pkt);
         }
-        memcpy(pkt->getPtr<uint8_t>(), hostAddr, pkt->getSize());
+        if (pmemAddr)
+            memcpy(pkt->getPtr<uint8_t>(), hostAddr, pkt->getSize());
         TRACE_PACKET("Read");
     } else if (pkt->isWrite()) {
         if (writeOK(pkt)) {
-            memcpy(hostAddr, pkt->getPtr<uint8_t>(), pkt->getSize());
+            if (pmemAddr)
+                memcpy(hostAddr, pkt->getPtr<uint8_t>(), pkt->getSize());
             TRACE_PACKET("Write");
         }
     } else if (pkt->isInvalidate()) {
@@ -320,11 +322,13 @@ PhysicalMemory::doFunctionalAccess(Packe
     uint8_t *hostAddr = pmemAddr + pkt->getAddr() - start();
 
     if (pkt->isRead()) {
-        memcpy(pkt->getPtr<uint8_t>(), hostAddr, pkt->getSize());
+        if (pmemAddr)
+            memcpy(pkt->getPtr<uint8_t>(), hostAddr, pkt->getSize());
         TRACE_PACKET("Read");
         pkt->makeAtomicResponse();
     } else if (pkt->isWrite()) {
-        memcpy(hostAddr, pkt->getPtr<uint8_t>(), pkt->getSize());
+        if (pmemAddr)
+            memcpy(hostAddr, pkt->getPtr<uint8_t>(), pkt->getSize());
         TRACE_PACKET("Write");
         pkt->makeAtomicResponse();
     } else if (pkt->isPrint()) {
@@ -448,6 +452,9 @@ void
 void
 PhysicalMemory::serialize(ostream &os)
 {
+    if (!pmemAddr)
+        return;
+
     gzFile compressedMem;
     string filename = name() + ".physmem";
 
@@ -480,13 +487,15 @@ void
 void
 PhysicalMemory::unserialize(Checkpoint *cp, const string &section)
 {
+    if (!pmemAddr)
+        return;
+
     gzFile compressedMem;
     long *tempPage;
     long *pmem_current;
     uint64_t curSize;
     uint32_t bytesRead;
     const int chunkSize = 16384;
-
 
     string filename;
 
_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to