diff options
author | Ali Saidi <Ali.Saidi@ARM.com> | 2011-06-16 15:08:12 -0500 |
---|---|---|
committer | Ali Saidi <Ali.Saidi@ARM.com> | 2011-06-16 15:08:12 -0500 |
commit | 8b4307f8d863b1805ec0e282bccda23ff4863f16 (patch) | |
tree | cb36ccd4b559b4bda0a42193a9f27f96c2da781c | |
parent | 9fe3610b32545b33767fc22b9fdd7f19046077d0 (diff) | |
download | gem5-8b4307f8d863b1805ec0e282bccda23ff4863f16.tar.xz |
ARM: Handle case where new TLB size is different from previous TLB size.
After a checkpoint we need to make sure that we restore the right
number of entries.
-rw-r--r-- | src/arch/arm/tlb.cc | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/arch/arm/tlb.cc b/src/arch/arm/tlb.cc index a2b1a9d8a..c59498212 100644 --- a/src/arch/arm/tlb.cc +++ b/src/arch/arm/tlb.cc @@ -264,6 +264,9 @@ TLB::serialize(ostream &os) DPRINTF(Checkpoint, "Serializing Arm TLB\n"); SERIALIZE_SCALAR(_attr); + + int num_entries = size; + SERIALIZE_SCALAR(num_entries); for(int i = 0; i < size; i++){ nameOut(os, csprintf("%s.TlbEntry%d", name(), i)); table[i].serialize(os); @@ -276,7 +279,9 @@ TLB::unserialize(Checkpoint *cp, const string §ion) DPRINTF(Checkpoint, "Unserializing Arm TLB\n"); UNSERIALIZE_SCALAR(_attr); - for(int i = 0; i < size; i++){ + int num_entries; + UNSERIALIZE_SCALAR(num_entries); + for(int i = 0; i < min(size, num_entries); i++){ table[i].unserialize(cp, csprintf("%s.TlbEntry%d", section, i)); } miscRegValid = false; |