43a44
> #include "cpu/base.hh"
49,50c50,51
< : MemObject(p), port(NULL), tlb(NULL),
< currState(NULL), doL1DescEvent(this), doL2DescEvent(this)
---
> : MemObject(p), port(NULL), tlb(NULL), currState(NULL), pending(false),
> doL1DescEvent(this), doL2DescEvent(this), doProcessEvent(this)
117a119,147
>
> if (!currState->timing)
> return processWalk();
>
> if (pending) {
> pendingQueue.push_back(currState);
> currState = NULL;
> } else {
> pending = true;
> processWalk();
> }
>
> return NoFault;
> }
>
> void
> TableWalker::processWalkWrapper()
> {
> assert(!currState);
> assert(pendingQueue.size());
> currState = pendingQueue.front();
> pendingQueue.pop_front();
> pending = true;
> processWalk();
> }
>
> Fault
> TableWalker::processWalk()
> {
148a179,181
>
> pending = false;
> nextWalk(currState->tc);
159c192,193
< &doL1DescEvent, (uint8_t*)&currState->l1Desc.data, (Tick)0);
---
> &doL1DescEvent, (uint8_t*)&currState->l1Desc.data,
> currState->tc->getCpuPtr()->ticks(1));
170c204,205
< NULL, (uint8_t*)&currState->l1Desc.data, (Tick)0, flag);
---
> NULL, (uint8_t*)&currState->l1Desc.data,
> currState->tc->getCpuPtr()->ticks(1), flag);
501c536,537
< &doL2DescEvent, (uint8_t*)&currState->l2Desc.data, 0);
---
> &doL2DescEvent, (uint8_t*)&currState->l2Desc.data,
> currState->tc->getCpuPtr()->ticks(1));
504c540,541
< NULL, (uint8_t*)&currState->l2Desc.data, 0);
---
> NULL, (uint8_t*)&currState->l2Desc.data,
> currState->tc->getCpuPtr()->ticks(1));
591a629,631
> pending = false;
> nextWalk(currState->tc);
>
602a643,645
> pending = false;
> nextWalk(currState->tc);
>
606d648
<
635a678,682
>
> stateQueueL2.pop_front();
> pending = false;
> nextWalk(currState->tc);
>
640d686
< stateQueueL2.pop_front();
644a691,699
> void
> TableWalker::nextWalk(ThreadContext *tc)
> {
> if (pendingQueue.size())
> schedule(doProcessEvent, tc->getCpuPtr()->nextCycle(curTick+1));
> }
>
>
>