summaryrefslogtreecommitdiff
path: root/src/arch/arm/table_walker.cc
diff options
context:
space:
mode:
authorAli Saidi <Ali.Saidi@ARM.com>2010-06-02 12:58:18 -0500
committerAli Saidi <Ali.Saidi@ARM.com>2010-06-02 12:58:18 -0500
commit2bad5138e4c1802645272a33f9b04859adac8ce2 (patch)
tree21fa6dd74f6b3f636706c97345e8018b10b89bd6 /src/arch/arm/table_walker.cc
parent6b00c7fa22a38f140790aa57c8913178b006e5e8 (diff)
downloadgem5-2bad5138e4c1802645272a33f9b04859adac8ce2.tar.xz
ARM TLB: Fix bug in memAttrs getting a bogus thread context
Diffstat (limited to 'src/arch/arm/table_walker.cc')
-rw-r--r--src/arch/arm/table_walker.cc8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/arch/arm/table_walker.cc b/src/arch/arm/table_walker.cc
index ecdb8a53e..802df8b12 100644
--- a/src/arch/arm/table_walker.cc
+++ b/src/arch/arm/table_walker.cc
@@ -150,8 +150,9 @@ TableWalker::walk(RequestPtr _req, ThreadContext *_tc, uint8_t _cid, TLB::Mode _
}
void
-TableWalker::memAttrs(TlbEntry &te, uint8_t texcb, bool s)
+TableWalker::memAttrs(ThreadContext *tc, TlbEntry &te, uint8_t texcb, bool s)
{
+ // Note: tc local variable is hiding tc class variable
DPRINTF(TLBVerbose, "memAttrs texcb:%d s:%d\n", texcb, s);
te.shareable = false; // default value
bool outer_shareable = false;
@@ -221,6 +222,7 @@ TableWalker::memAttrs(TlbEntry &te, uint8_t texcb, bool s)
panic("More than 32 states for 5 bits?\n");
}
} else {
+ assert(tc);
PRRR prrr = tc->readMiscReg(MISCREG_PRRR);
NMRR nmrr = tc->readMiscReg(MISCREG_NMRR);
DPRINTF(TLBVerbose, "memAttrs PRRR:%08x NMRR:%08x\n", prrr, nmrr);
@@ -415,7 +417,7 @@ TableWalker::doL1Descriptor()
te.ap = l1Desc.ap();
te.domain = l1Desc.domain();
te.asid = contextId;
- memAttrs(te, l1Desc.texcb(), l1Desc.shareable());
+ memAttrs(tc, te, l1Desc.texcb(), l1Desc.shareable());
DPRINTF(TLB, "Inserting Section Descriptor into TLB\n");
DPRINTF(TLB, " - N%d pfn:%#x size: %#x global:%d valid: %d\n",
@@ -510,7 +512,7 @@ TableWalker::doL2Descriptor()
te.xn = l2Desc.xn();
te.ap = l2Desc.ap();
te.domain = l1Desc.domain();
- memAttrs(te, l2Desc.texcb(), l2Desc.shareable());
+ memAttrs(tc, te, l2Desc.texcb(), l2Desc.shareable());
if (!delayed) {
tc = NULL;