diff options
author | Steve Reinhardt <stever@eecs.umich.edu> | 2006-10-21 23:35:00 -0700 |
---|---|---|
committer | Steve Reinhardt <stever@eecs.umich.edu> | 2006-10-21 23:35:00 -0700 |
commit | 5e2263fc523633af81a81ed7cea2cf72bd57efbb (patch) | |
tree | ff0568a58123097440f67f6f966aae0004ee3053 /src/mem | |
parent | 0159529343f31cc4a4496d5b5c2939f8e2e0bb95 (diff) | |
download | gem5-5e2263fc523633af81a81ed7cea2cf72bd57efbb.tar.xz |
Small bug fixes for timing LL/SC. Better now but
not necessarily 100% there yet.
src/mem/cache/cache_impl.hh:
Generate response packet on failed store conditional.
src/mem/packet.hh:
Clear packet flags when reinitializing.
(SATISFIED in particular is one we don't want to leave set.)
--HG--
extra : convert_revision : 29207c8a09afcbce43f41c480ad0c1b21d47454f
Diffstat (limited to 'src/mem')
-rw-r--r-- | src/mem/cache/cache_impl.hh | 7 | ||||
-rw-r--r-- | src/mem/packet.hh | 1 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/mem/cache/cache_impl.hh b/src/mem/cache/cache_impl.hh index 64f658907..3c47762f6 100644 --- a/src/mem/cache/cache_impl.hh +++ b/src/mem/cache/cache_impl.hh @@ -232,7 +232,12 @@ Cache<TagStore,Buffering,Coherence>::access(PacketPtr &pkt) } } - if (!(pkt->flags & SATISFIED)) { + if (pkt->flags & SATISFIED) { + // happens when a store conditional fails because it missed + // the cache completely + if (pkt->needsResponse()) + respond(pkt, curTick+lat); + } else { missQueue->handleMiss(pkt, size, curTick + hitLatency); } diff --git a/src/mem/packet.hh b/src/mem/packet.hh index 1a0011d87..cb97dd036 100644 --- a/src/mem/packet.hh +++ b/src/mem/packet.hh @@ -310,6 +310,7 @@ class Packet * multiple transactions. */ void reinitFromRequest() { assert(req->validPaddr); + flags = 0; addr = req->paddr; size = req->size; time = req->time; |