I could not figure out what is the problem in the first place. All what I can 
see is that the code behavior seems illogical because it will certainly cause 
the assertion to fail consistently in timing mode

Regards
Mostafa 

> Date: Thu, 10 Jan 2013 18:23:55 -0600
> From: ni...@cs.wisc.edu
> To: mostafa.m.has...@hotmail.com
> CC: gem5-users@gem5.org
> Subject: RE: [gem5-users] Running benchmark on FS X86 : Assertion 
> `!delayedResponse' failed.
> 
> 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

Reply via email to