Add a function to get a SimObject's memory mode and rework
authorNathan Binkert <binkertn@umich.edu>
Sun, 10 Jun 2007 20:52:21 +0000 (13:52 -0700)
committerNathan Binkert <binkertn@umich.edu>
Sun, 10 Jun 2007 20:52:21 +0000 (13:52 -0700)
the set memory mode code to only go through the change if
it is necessary

--HG--
extra : convert_revision : 28288227bb56b0a04d756776eaf0a4ff9e1f8c20

src/python/m5/SimObject.py
src/python/m5/__init__.py
src/python/swig/sim_object.i

index 42266a80e3546ebc0b32cd89b8c1dd83c5cbe8e0..f87e13732eb2d5f5ce23a7272ea3d25ca9c79ca5 100644 (file)
@@ -722,6 +722,13 @@ class SimObject(object):
         for child in self._children.itervalues():
             child.resume()
 
+    def getMemoryMode(self):
+        if not isinstance(self, m5.objects.System):
+            return None
+
+        system_ptr = internal.sim_object.convertToSystemPtr(self._ccObject)
+        return system_ptr.getMemoryMode()
+
     def changeTiming(self, mode):
         if isinstance(self, m5.objects.System):
             # i don't know if there's a better way to do this - calling
index 06dc92bc6d263d5eb81f64b81e9b85eafd924875..a9206a474fcafd46eb76dac04b8ecbe37bb77c16 100644 (file)
@@ -190,17 +190,20 @@ def changeToAtomic(system):
     if not isinstance(system, (objects.Root, objects.System)):
         raise TypeError, "Parameter of type '%s'.  Must be type %s or %s." % \
               (type(system), objects.Root, objects.System)
-    doDrain(system)
-    print "Changing memory mode to atomic"
-    system.changeTiming(internal.sim_object.SimObject.Atomic)
+    if system.getMemoryMode() != internal.sim_object.SimObject.Atomic:
+        doDrain(system)
+        print "Changing memory mode to atomic"
+        system.changeTiming(internal.sim_object.SimObject.Atomic)
 
 def changeToTiming(system):
     if not isinstance(system, (objects.Root, objects.System)):
         raise TypeError, "Parameter of type '%s'.  Must be type %s or %s." % \
               (type(system), objects.Root, objects.System)
-    doDrain(system)
-    print "Changing memory mode to timing"
-    system.changeTiming(internal.sim_object.SimObject.Timing)
+
+    if system.getMemoryMode() != internal.sim_object.SimObject.Timing:
+        doDrain(system)
+        print "Changing memory mode to timing"
+        system.changeTiming(internal.sim_object.SimObject.Timing)
 
 def switchCpus(cpuList):
     print "switching cpus"
index b2af72c618f0711032c400a3e98b7d89994223f8..a1737c438f56d9ee205c0153fff5f49a233b4a4e 100644 (file)
@@ -66,6 +66,7 @@ class System {
     private:
       System();
     public:
+      SimObject::MemoryMode getMemoryMode();
       void setMemoryMode(SimObject::MemoryMode mode);
 };