142,146c142,143
< if (currStates.size()) {
< WalkerState * newState = currStates.front();
< if (!newState->wasStarted())
< newState->startWalk();
< }
---
> if (currStates.size())
> startWalkWrapper();
194a192,221
> void
> Walker::startWalkWrapper()
> {
> unsigned num_squashed = 0;
> WalkerState *currState = currStates.front();
> while ((num_squashed < numSquashable) && currState &&
> currState->translation->squashed()) {
> currStates.pop_front();
> num_squashed++;
>
> DPRINTF(PageTableWalker, "Squashing table walk for address %#x\n",
> currState->req->getVaddr());
>
> // finish the translation which will delete the translation object
> currState->translation->finish(new UnimpFault("Squashed Inst"),
> currState->req, currState->tc, currState->mode);
>
> // delete the current request
> delete currState;
>
> // check the next translation request, if it exists
> if (currStates.size())
> currState = currStates.front();
> else
> currState = NULL;
> }
> if (currState && !currState->wasStarted())
> currState->startWalk();
> }
>