68,69c68,71
< doL0LongDescEvent(this), doL1LongDescEvent(this), doL2LongDescEvent(this),
< doL3LongDescEvent(this),
---
> doL0LongDescEvent(this), doL1LongDescEvent(this),
> doL2LongDescEvent(this), doL3LongDescEvent(this),
> LongDescEventByLevel { &doL0LongDescEvent, &doL1LongDescEvent,
> &doL2LongDescEvent, &doL3LongDescEvent },
141c143,144
< stateQueues[L1].empty() && stateQueues[L2].empty() &&
---
> stateQueues[L0].empty() && stateQueues[L1].empty() &&
> stateQueues[L2].empty() && stateQueues[L3].empty() &&
700,702d702
< Event *event = start_lookup_level == L1 ? (Event *) &doL1LongDescEvent
< : (Event *) &doL2LongDescEvent;
<
705c705,706
< event, &TableWalker::doLongDescriptor);
---
> LongDescEventByLevel[start_lookup_level],
> &TableWalker::doLongDescriptor);
970,995c971,973
< Event *event;
< switch (start_lookup_level) {
< case L0:
< event = (Event *) &doL0LongDescEvent;
< break;
< case L1:
< event = (Event *) &doL1LongDescEvent;
< break;
< case L2:
< event = (Event *) &doL2LongDescEvent;
< break;
< case L3:
< event = (Event *) &doL3LongDescEvent;
< break;
< default:
< panic("Invalid table lookup level");
< break;
< }
< port->dmaAction(MemCmd::ReadReq, desc_addr, sizeof(uint64_t),
< event, (uint8_t*) &currState->longDesc.data,
< currState->tc->getCpuPtr()->clockPeriod(), flag);
< DPRINTF(TLBVerbose,
< "Adding to walker fifo: queue size before adding: %d\n",
< stateQueues[start_lookup_level].size());
< stateQueues[start_lookup_level].push_back(currState);
< currState = NULL;
---
> fetchDescriptor(desc_addr, (uint8_t*) &currState->longDesc.data,
> sizeof(uint64_t), flag, start_lookup_level,
> LongDescEventByLevel[start_lookup_level], NULL);
1675c1653
< currState->longDesc.lookupLevel =
---
> LookupLevel L = currState->longDesc.lookupLevel =
1678c1656
< switch (currState->longDesc.lookupLevel) {
---
> switch (L) {
1681,1682d1658
< event = &doL1LongDescEvent;
< break;
1684,1685d1659
< event = &doL2LongDescEvent;
< break;
1687c1661
< event = &doL3LongDescEvent;
---
> event = LongDescEventByLevel[L];