inorder: fix address list bug
This commit is contained in:
parent
66632539b6
commit
4ac245737d
3 changed files with 14 additions and 13 deletions
|
@ -61,7 +61,7 @@ if 'InOrderCPU' in env['CPU_MODELS']:
|
||||||
'InOrderMDU', 'InOrderAGEN', 'InOrderFetchSeq', 'InOrderTLB', 'InOrderBPred',
|
'InOrderMDU', 'InOrderAGEN', 'InOrderFetchSeq', 'InOrderTLB', 'InOrderBPred',
|
||||||
'InOrderDecode', 'InOrderExecute', 'InOrderInstBuffer', 'InOrderUseDef',
|
'InOrderDecode', 'InOrderExecute', 'InOrderInstBuffer', 'InOrderUseDef',
|
||||||
'InOrderGraduation', 'InOrderCachePort', 'RegDepMap', 'Resource',
|
'InOrderGraduation', 'InOrderCachePort', 'RegDepMap', 'Resource',
|
||||||
'ThreadModel'])
|
'ThreadModel', 'AddrDep'])
|
||||||
|
|
||||||
Source('pipeline_traits.cc')
|
Source('pipeline_traits.cc')
|
||||||
Source('inorder_dyn_inst.cc')
|
Source('inorder_dyn_inst.cc')
|
||||||
|
|
|
@ -1335,7 +1335,7 @@ InOrderCPU::cleanUpRemovedReqs()
|
||||||
while (!reqRemoveList.empty()) {
|
while (!reqRemoveList.empty()) {
|
||||||
ResourceRequest *res_req = reqRemoveList.front();
|
ResourceRequest *res_req = reqRemoveList.front();
|
||||||
|
|
||||||
DPRINTF(InOrderCPU, "[tid:%i] [sn:%lli]: Removing Request "
|
DPRINTF(Resource, "[tid:%i] [sn:%lli]: Removing Request "
|
||||||
"[stage_num:%i] [res:%s] [slot:%i] [completed:%i].\n",
|
"[stage_num:%i] [res:%s] [slot:%i] [completed:%i].\n",
|
||||||
res_req->inst->threadNumber,
|
res_req->inst->threadNumber,
|
||||||
res_req->inst->seqNum,
|
res_req->inst->seqNum,
|
||||||
|
|
|
@ -188,12 +188,18 @@ CacheUnit::setAddrDependency(DynInstPtr inst)
|
||||||
|
|
||||||
addrList[tid].push_back(req_addr);
|
addrList[tid].push_back(req_addr);
|
||||||
addrMap[tid][req_addr] = inst->seqNum;
|
addrMap[tid][req_addr] = inst->seqNum;
|
||||||
DPRINTF(InOrderCachePort,
|
|
||||||
"[tid:%i]: [sn:%i]: Address %08p added to dependency list\n",
|
|
||||||
inst->readTid(), inst->seqNum, req_addr);
|
|
||||||
DPRINTF(AddrDep,
|
DPRINTF(AddrDep,
|
||||||
"[tid:%i]: [sn:%i]: Address %08p added to dependency list\n",
|
"[tid:%i]: [sn:%i]: Address %08p added to dependency list\n",
|
||||||
inst->readTid(), inst->seqNum, req_addr);
|
inst->readTid(), inst->seqNum, req_addr);
|
||||||
|
|
||||||
|
//@NOTE: 10 is an arbitrarily "high" number here, but to be exact
|
||||||
|
// we would need to know the # of outstanding accesses
|
||||||
|
// a priori. Information like fetch width, stage width,
|
||||||
|
// and the branch resolution stage would be useful for the
|
||||||
|
// icache_port (among other things). For the dcache, the #
|
||||||
|
// of outstanding cache accesses might be sufficient.
|
||||||
|
assert(addrList[tid].size() < 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -203,6 +209,8 @@ CacheUnit::removeAddrDependency(DynInstPtr inst)
|
||||||
|
|
||||||
Addr mem_addr = inst->getMemAddr();
|
Addr mem_addr = inst->getMemAddr();
|
||||||
|
|
||||||
|
inst->unsetMemAddr();
|
||||||
|
|
||||||
// Erase from Address List
|
// Erase from Address List
|
||||||
vector<Addr>::iterator vect_it = find(addrList[tid].begin(), addrList[tid].end(),
|
vector<Addr>::iterator vect_it = find(addrList[tid].begin(), addrList[tid].end(),
|
||||||
mem_addr);
|
mem_addr);
|
||||||
|
@ -1106,8 +1114,6 @@ CacheUnit::processCacheCompletion(PacketPtr pkt)
|
||||||
tid, cache_req->inst->readPC());
|
tid, cache_req->inst->readPC());
|
||||||
cache_req->setMemAccCompleted();
|
cache_req->setMemAccCompleted();
|
||||||
}
|
}
|
||||||
|
|
||||||
inst->unsetMemAddr();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1225,10 +1231,6 @@ CacheUnit::squash(DynInstPtr inst, int stage_num,
|
||||||
|
|
||||||
// Mark slot for removal from resource
|
// Mark slot for removal from resource
|
||||||
slot_remove_list.push_back(req_ptr->getSlot());
|
slot_remove_list.push_back(req_ptr->getSlot());
|
||||||
|
|
||||||
DPRINTF(InOrderCachePort,
|
|
||||||
"[tid:%i] Squashing request from [sn:%i]\n",
|
|
||||||
req_ptr->getInst()->readTid(), req_ptr->getInst()->seqNum);
|
|
||||||
} else {
|
} else {
|
||||||
DPRINTF(InOrderCachePort,
|
DPRINTF(InOrderCachePort,
|
||||||
"[tid:%i] Request from [sn:%i] squashed, but still pending completion.\n",
|
"[tid:%i] Request from [sn:%i] squashed, but still pending completion.\n",
|
||||||
|
@ -1247,7 +1249,6 @@ CacheUnit::squash(DynInstPtr inst, int stage_num,
|
||||||
|
|
||||||
removeAddrDependency(req_ptr->getInst());
|
removeAddrDependency(req_ptr->getInst());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
map_it++;
|
map_it++;
|
||||||
|
|
Loading…
Reference in a new issue