summaryrefslogtreecommitdiff
path: root/src/mem/cache/base_cache.cc
diff options
context:
space:
mode:
authorRon Dreslinski <rdreslin@umich.edu>2006-07-10 17:16:15 -0400
committerRon Dreslinski <rdreslin@umich.edu>2006-07-10 17:16:15 -0400
commit6592045cbc138306474d24d60daa222a07673fe2 (patch)
tree5fb86438978286223db6f4a9faf47a516d9d3d6b /src/mem/cache/base_cache.cc
parent5584e2b26eccb5d2bf445b8b0b2040449d0b0a77 (diff)
downloadgem5-6592045cbc138306474d24d60daa222a07673fe2.tar.xz
Some fixes so that MSHR's are matched and we don't issue overlapping requests with detailed cpu
src/mem/cache/base_cache.cc: If we still have outstanding requests, need to schedule event again src/mem/cache/miss/miss_queue.cc: Need to use block size so overlapping requests match in the MSHR's src/mem/cache/miss/mshr.cc: Actually save the address, otherwise we can't match MSHR's --HG-- extra : convert_revision : f0f018b89c2fb99f3ce8d6eafc0712ee8edeeda8
Diffstat (limited to 'src/mem/cache/base_cache.cc')
-rw-r--r--src/mem/cache/base_cache.cc17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/mem/cache/base_cache.cc b/src/mem/cache/base_cache.cc
index be9769fdc..451da28e8 100644
--- a/src/mem/cache/base_cache.cc
+++ b/src/mem/cache/base_cache.cc
@@ -117,11 +117,24 @@ BaseCache::CacheEvent::process()
if (!pkt)
{
if (!cachePort->isCpuSide)
+ {
pkt = cachePort->cache->getPacket();
+ bool success = cachePort->sendTiming(pkt);
+ DPRINTF(Cache, "Address %x was %s in sending the timing request\n",
+ pkt->getAddr(), success ? "succesful" : "unsuccesful");
+ cachePort->cache->sendResult(pkt, success);
+ if (success && cachePort->cache->doMasterRequest())
+ {
+ //Still more to issue, rerequest in 1 cycle
+ pkt = NULL;
+ this->schedule(curTick+1);
+ }
+ }
else
+ {
pkt = cachePort->cache->getCoherencePacket();
- bool success = cachePort->sendTiming(pkt);
- cachePort->cache->sendResult(pkt, success);
+ cachePort->sendTiming(pkt);
+ }
return;
}
//Know the packet to send, no need to mark in service (must succed)