What all did you try to solve this issue? Your initial reasoning for the
problem was certainly incorrect.
--
Nilay
On Fri, 11 Jan 2013, Mostafa Mahmoud Hassan wrote:
Any guesses with this guys ?
Regards
------------------------------------------------------------------
why do you think that the walker inserted a translation then it was not
available when it comes to use it ?? could not it be the first time to look for
it and due to miss decided to perform a walk inserting it for the first time ??
I see from the code in tlb.cc (starting from line 292) that it failed to lookup the address and decided to
start a walk which (whatever the walk caused a fault or not) will cause delayedResponse to change to true due
to the suspected behavior of this if condition "(timing || fault != NoFault)" , as you can see this
condition will always be true because we pass timing = true on calling "translate" from
WalkerState::recvPacket in pagetable_walker.cc which blindly assert the "delayedResponse"
======================X86, TLB::translate ====================
if (m5Reg.paging) {
DPRINTF(TLB, "Paging enabled.\n");
&
nbsp; // The vaddr already has the segment base applied.
TlbEntry *entry = lookup(vaddr);
if (!entry) {
if (FullSystem) {
Fault fault = walker->start(tc, translation, req, mode);
if (timing || fault != NoFault) {
// This gets ignored in atomic mode.
&
nbsp; delayedResponse = true;
return fault;
}
entry = lookup(vaddr);
assert(entry);
} else {
DPRINTF(TLB, "Handling a TLB miss for "
&
nbsp; "address %#x at pc %#x.\n",
vaddr, tc->instAddr());
Compare this to the behavior in ARM architecture,
======================ARM, TLB::translateFs see lines
516->541====================
fault = tableWalker->walk(req, tc, contextId, mode, translation,
timing, functional);
if (timing && fault == NoFault) {
delay = true;
// for timing mode, return and wait for table walk
return fault;
The condition here (timing && fault == NoFault) makes sense. In addition, "delay" is
properly checked in "TLB::translateTiming" function :
if (!delay)
translation->finish(fault, req, tc, mode);
else
translation->markDelayed();
Regards
It appears as though the page table walker inserted a translation into the TLB and then when
it came to use that translation it wasn't available (and would >require another walk),
which is causing the assert to happen. You should figure out what is being inserted and why it
isn't matching in the tlb on the >walker->tlb->translate() call.>Ali
_______________________________________________
gem5-users mailing list
gem5-users@gem5.org
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
_______________________________________________
gem5-users mailing list
gem5-users@gem5.org
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users