arm: Invalidate cached TLB configuration in drainResume

Currently, we invalidate the cached miscregs in
TLB::unserialize(). The intended use of the drainResume() method is to
invalidate cached state and prepare the system to resume after a CPU
handover or (un)serialization. This patch moves the TLB miscregs
invalidation code to the drainResume() method to avoid surprising
behavior.
This commit is contained in:
Andreas Sandberg 2013-01-07 13:05:45 -05:00
parent 0d59549cd9
commit fb52ea9220
2 changed files with 12 additions and 3 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2010 ARM Limited
* Copyright (c) 2010-2012 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@ -252,6 +252,14 @@ TLB::flushMva(Addr mva)
flushTlbMva++;
}
void
TLB::drainResume()
{
// We might have unserialized something or switched CPUs, so make
// sure to re-read the misc regs.
miscRegValid = false;
}
void
TLB::serialize(ostream &os)
{
@ -278,7 +286,6 @@ TLB::unserialize(Checkpoint *cp, const string &section)
for(int i = 0; i < min(size, num_entries); i++){
table[i].unserialize(cp, csprintf("%s.TlbEntry%d", section, i));
}
miscRegValid = false;
}
void

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2010 ARM Limited
* Copyright (c) 2010-2012 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
@ -208,6 +208,8 @@ class TLB : public BaseTLB
Fault translateTiming(RequestPtr req, ThreadContext *tc,
Translation *translation, Mode mode);
void drainResume();
// Checkpointing
void serialize(std::ostream &os);
void unserialize(Checkpoint *cp, const std::string &section);