python: Rename doDrain()->drain() and make it do the right thing
There is no point in exporting the old drain() method in Simulate.py. It should only be used internally by doDrain(). This patch moves the old drain() method into doDrain() and renames doDrain() to drain().
This commit is contained in:
parent
196397fea4
commit
dc01535c7e
2 changed files with 26 additions and 25 deletions
|
@ -242,7 +242,7 @@ def repeatSwitch(testsys, repeat_switch_cpu_list, maxtick, switch_freq):
|
|||
return exit_cause
|
||||
|
||||
print "draining the system"
|
||||
m5.doDrain(testsys)
|
||||
m5.drain(testsys)
|
||||
m5.switchCpus(repeat_switch_cpu_list)
|
||||
m5.resume(testsys)
|
||||
|
||||
|
@ -469,7 +469,7 @@ def run(options, root, testsys, cpu_class):
|
|||
print "Switching CPUS @ tick %s" % (m5.curTick())
|
||||
print "Simulation ends instruction count:%d" % \
|
||||
(testsys.switch_cpus_1[0].max_insts_any_thread)
|
||||
m5.doDrain(testsys)
|
||||
m5.drain(testsys)
|
||||
m5.switchCpus(switch_cpu_list1)
|
||||
m5.resume(testsys)
|
||||
|
||||
|
|
|
@ -157,17 +157,14 @@ atexit.register(stats.dump)
|
|||
# register our C++ exit callback function with Python
|
||||
atexit.register(internal.core.doExitCleanup)
|
||||
|
||||
# This loops until all objects have been fully drained.
|
||||
def doDrain(root):
|
||||
all_drained = drain(root)
|
||||
while (not all_drained):
|
||||
all_drained = drain(root)
|
||||
|
||||
# Tries to drain all objects. Draining might not be completed unless
|
||||
# all objects return that they are drained on the first call. This is
|
||||
# because as objects drain they may cause other objects to no longer
|
||||
# be drained.
|
||||
# Drain the system in preparation of a checkpoint or memory mode
|
||||
# switch.
|
||||
def drain(root):
|
||||
# Try to drain all objects. Draining might not be completed unless
|
||||
# all objects return that they are drained on the first call. This
|
||||
# is because as objects drain they may cause other objects to no
|
||||
# longer be drained.
|
||||
def _drain():
|
||||
all_drained = False
|
||||
dm = internal.drain.createDrainManager()
|
||||
unready_objs = sum(obj.drain(dm) for obj in root.descendants())
|
||||
|
@ -180,6 +177,10 @@ def drain(root):
|
|||
internal.drain.cleanupDrainManager(dm)
|
||||
return all_drained
|
||||
|
||||
all_drained = _drain()
|
||||
while (not all_drained):
|
||||
all_drained = _drain()
|
||||
|
||||
def resume(root):
|
||||
for obj in root.descendants(): obj.drainResume()
|
||||
|
||||
|
@ -187,7 +188,7 @@ def checkpoint(dir):
|
|||
root = objects.Root.getInstance()
|
||||
if not isinstance(root, objects.Root):
|
||||
raise TypeError, "Checkpoint must be called on a root object."
|
||||
doDrain(root)
|
||||
drain(root)
|
||||
print "Writing checkpoint"
|
||||
internal.core.serializeAll(dir)
|
||||
resume(root)
|
||||
|
@ -197,7 +198,7 @@ def changeMemoryMode(system, mode):
|
|||
raise TypeError, "Parameter of type '%s'. Must be type %s or %s." % \
|
||||
(type(system), objects.Root, objects.System)
|
||||
if system.getMemoryMode() != mode:
|
||||
doDrain(system)
|
||||
drain(system)
|
||||
system.setMemoryMode(mode)
|
||||
else:
|
||||
print "System already in target mode. Memory mode unchanged."
|
||||
|
|
Loading…
Reference in a new issue