diff options
author | Ron Dreslinski <rdreslin@umich.edu> | 2006-11-22 20:20:38 -0500 |
---|---|---|
committer | Ron Dreslinski <rdreslin@umich.edu> | 2006-11-22 20:20:38 -0500 |
commit | 28fd4ab39fe7991d335e8496ed2b3434db61140d (patch) | |
tree | fcd7b6b5e1602edefe75b4b7d3a447598c65ecea /src/mem/cache/cache_impl.hh | |
parent | 719416b60ff2ab60403d22b6c7f75139b9535d8c (diff) | |
download | gem5-28fd4ab39fe7991d335e8496ed2b3434db61140d.tar.xz |
Do a functional access to levels above on a read as a temporary solution for L2's in FS
Fix a small writeback bug when missing in the L2 in atomic mode
src/mem/bus.cc:
Fix a comment to make sense
src/mem/cache/cache_impl.hh:
Do a functional access to levels above on a read as a temporary solution for L2's in FS
Also fix a small writeback miss in L2 issue
src/mem/cache/coherence/simple_coherence.hh:
src/mem/cache/coherence/uni_coherence.cc:
src/mem/cache/coherence/uni_coherence.hh:
Do a functional access to levels above on a read as a temporary solution for L2's in FS
tests/quick/00.hello/ref/alpha/linux/o3-timing/m5stats.txt:
tests/quick/00.hello/ref/alpha/linux/simple-timing/m5stats.txt:
tests/quick/01.hello-2T-smt/ref/alpha/linux/o3-timing/m5stats.txt:
Update ref's for writeback changes
--HG--
extra : convert_revision : 937febd577b16b7fd97a5a68acaf53541828a251
Diffstat (limited to 'src/mem/cache/cache_impl.hh')
-rw-r--r-- | src/mem/cache/cache_impl.hh | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/mem/cache/cache_impl.hh b/src/mem/cache/cache_impl.hh index df59b0a4f..3a681bc52 100644 --- a/src/mem/cache/cache_impl.hh +++ b/src/mem/cache/cache_impl.hh @@ -391,7 +391,13 @@ Cache<TagStore,Buffering,Coherence>::snoop(PacketPtr &pkt) } //Send a timing (true) invalidate up if the protocol calls for it - coherence->propogateInvalidate(pkt, true); + if (coherence->propogateInvalidate(pkt, true)) { + //Temp hack, we had a functional read hit in the L1, mark as success + pkt->flags |= SATISFIED; + pkt->result = Packet::Success; + respondToSnoop(pkt, curTick + hitLatency); + return; + } Addr blk_addr = pkt->getAddr() & ~(Addr(blkSize-1)); BlkType *blk = tags->findBlock(pkt); @@ -562,6 +568,7 @@ Cache<TagStore,Buffering,Coherence>::probe(PacketPtr &pkt, bool update, PacketList writebacks; int lat; + BlkType *blk = tags->handleAccess(pkt, lat, writebacks, update); DPRINTF(Cache, "%s %x %s\n", pkt->cmdString(), @@ -615,7 +622,8 @@ Cache<TagStore,Buffering,Coherence>::probe(PacketPtr &pkt, bool update, // Can't handle it, return request unsatisfied. panic("Atomic access ran into outstanding MSHR's or WB's!"); } - if (!pkt->req->isUncacheable()) { + if (!pkt->req->isUncacheable() /*Uncacheables just go through*/ + && (pkt->cmd != Packet::Writeback)/*Writebacks on miss fall through*/) { // Fetch the cache block to fill BlkType *blk = tags->findBlock(pkt); Packet::Command temp_cmd = coherence->getBusCmd(pkt->cmd, @@ -691,7 +699,12 @@ Tick Cache<TagStore,Buffering,Coherence>::snoopProbe(PacketPtr &pkt) { //Send a atomic (false) invalidate up if the protocol calls for it - coherence->propogateInvalidate(pkt, false); + if (coherence->propogateInvalidate(pkt, false)) { + //Temp hack, we had a functional read hit in the L1, mark as success + pkt->flags |= SATISFIED; + pkt->result = Packet::Success; + return hitLatency; + } Addr blk_addr = pkt->getAddr() & ~(Addr(blkSize-1)); BlkType *blk = tags->findBlock(pkt); |