diff options
author | Andreas Sandberg <Andreas.Sandberg@ARM.com> | 2013-01-07 13:05:48 -0500 |
---|---|---|
committer | Andreas Sandberg <Andreas.Sandberg@ARM.com> | 2013-01-07 13:05:48 -0500 |
commit | e09e9fa279dec86b171b5e3efeb7057fa0d21cc9 (patch) | |
tree | 81fe4595ffa298f566a595caa54d5166c9bc09af /src/cpu/base.hh | |
parent | 964aa49d1523787c06491453a85fad511b0a5883 (diff) | |
download | gem5-e09e9fa279dec86b171b5e3efeb7057fa0d21cc9.tar.xz |
cpu: Flush TLBs on switchOut()
This changeset inserts a TLB flush in BaseCPU::switchOut to prevent
stale translations when doing repeated switching. Additionally, the
TLB flushing functionality is exported to the Python to make debugging
of switching/checkpointing easier.
A simulation script will typically use the TLB flushing functionality
to generate a reference trace. The following sequence can be used to
simulate a handover (this depends on how drain is implemented, but is
generally the case) between identically configured CPU models:
m5.drain(test_sys)
[ cpu.flushTLBs() for cpu in test_sys.cpu ]
m5.resume(test_sys)
The generated trace should normally be identical to a trace generated
when switching between identically configured CPU models or
checkpointing and resuming.
Diffstat (limited to 'src/cpu/base.hh')
-rw-r--r-- | src/cpu/base.hh | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/cpu/base.hh b/src/cpu/base.hh index 633b7f2a7..cd30d29bc 100644 --- a/src/cpu/base.hh +++ b/src/cpu/base.hh @@ -324,6 +324,17 @@ class BaseCPU : public MemObject virtual void takeOverFrom(BaseCPU *cpu); /** + * Flush all TLBs in the CPU. + * + * This method is mainly used to flush stale translations when + * switching CPUs. It is also exported to the Python world to + * allow it to request a TLB flush after draining the CPU to make + * it easier to compare traces when debugging + * handover/checkpointing. + */ + void flushTLBs(); + + /** * Determine if the CPU is switched out. * * @return True if the CPU is switched out, false otherwise. |