Fixes for Kevins O3 model to work with the blocking caches.
src/cpu/o3/fetch_impl.hh: Fix ordering so dereference works src/cpu/o3/lsq_impl.hh: Check to make sure we didn't squash already src/cpu/o3/lsq_unit.hh: Fix for counting squashed retrys in the WB count src/cpu/o3/lsq_unit_impl.hh: Make sure to set retryID for stores, and clear it appropriately --HG-- extra : convert_revision : 689765a1baea7b36f13eb177d65e97b52b6da09f
This commit is contained in:
parent
8a82553aec
commit
ec0a18ffb9
4 changed files with 10 additions and 1 deletions
|
@ -672,9 +672,9 @@ DefaultFetch<Impl>::doSquash(const Addr &new_PC, unsigned tid)
|
|||
assert(cacheBlocked);
|
||||
cacheBlocked = false;
|
||||
retryTid = -1;
|
||||
retryPkt = NULL;
|
||||
delete retryPkt->req;
|
||||
delete retryPkt;
|
||||
retryPkt = NULL;
|
||||
}
|
||||
|
||||
fetchStatus[tid] = Squashing;
|
||||
|
|
|
@ -71,6 +71,11 @@ template <class Impl>
|
|||
void
|
||||
LSQ<Impl>::DcachePort::recvRetry()
|
||||
{
|
||||
if (lsq->retryTid == -1)
|
||||
{
|
||||
//Squashed, so drop it
|
||||
return;
|
||||
}
|
||||
lsq->thread[lsq->retryTid].recvRetry();
|
||||
// Speculatively clear the retry Tid. This will get set again if
|
||||
// the LSQUnit was unable to complete its access.
|
||||
|
|
|
@ -646,6 +646,8 @@ LSQUnit<Impl>::read(Request *req, T &data, int load_idx)
|
|||
// handle it.
|
||||
if (lsq->cacheBlocked()) {
|
||||
++lsqCacheBlocked;
|
||||
|
||||
iewStage->decrWb(load_inst->seqNum);
|
||||
// There's an older load that's already going to squash.
|
||||
if (isLoadBlocked && blockedLoadSeqNum < load_inst->seqNum)
|
||||
return NoFault;
|
||||
|
|
|
@ -626,6 +626,7 @@ LSQUnit<Impl>::writebackStores()
|
|||
++lsqCacheBlocked;
|
||||
assert(retryPkt == NULL);
|
||||
retryPkt = data_pkt;
|
||||
lsq->setRetryTid(lsqID);
|
||||
} else {
|
||||
storePostSend(data_pkt);
|
||||
}
|
||||
|
@ -869,6 +870,7 @@ LSQUnit<Impl>::recvRetry()
|
|||
storePostSend(retryPkt);
|
||||
retryPkt = NULL;
|
||||
isStoreBlocked = false;
|
||||
lsq->setRetryTid(-1);
|
||||
} else {
|
||||
// Still blocked!
|
||||
++lsqCacheBlocked;
|
||||
|
|
Loading…
Reference in a new issue