From: Steve Reinhardt Date: Sun, 22 Oct 2006 06:35:00 +0000 (-0700) Subject: Small bug fixes for timing LL/SC. Better now but X-Git-Tag: m5_2.0_beta2~76^2~3 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5e2263fc523633af81a81ed7cea2cf72bd57efbb;p=gem5.git 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 --- 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::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;