diff options
author | Andreas Hansson <andreas.hansson@arm.com> | 2013-02-19 12:57:47 -0500 |
---|---|---|
committer | Andreas Hansson <andreas.hansson@arm.com> | 2013-02-19 12:57:47 -0500 |
commit | da950caed24f7674be4aa999c2f17c520165fd84 (patch) | |
tree | 1dbdeaae1f440c05c3df3c388eac4da01f55b284 /src | |
parent | a86f67e706cda064c95aca7cc89bceb64b92368f (diff) | |
download | gem5-da950caed24f7674be4aa999c2f17c520165fd84.tar.xz |
mem: Fix sender state bug and delay popping
This patch fixes a newly introduced bug where the sender state was
popped before checking that it should be. Amazingly all regressions
pass, but Linux fails to boot on the detailed CPU with caches enabled.
Diffstat (limited to 'src')
-rw-r--r-- | src/mem/cache/cache_impl.hh | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/mem/cache/cache_impl.hh b/src/mem/cache/cache_impl.hh index 8f7938b93..2be41642d 100644 --- a/src/mem/cache/cache_impl.hh +++ b/src/mem/cache/cache_impl.hh @@ -366,7 +366,7 @@ Cache<TagStore>::recvTimingSnoopResp(PacketPtr pkt) // must be cache-to-cache response from upper to lower level ForwardResponseRecord *rec = - dynamic_cast<ForwardResponseRecord *>(pkt->popSenderState()); + dynamic_cast<ForwardResponseRecord *>(pkt->senderState); assert(!system->bypassCaches()); if (rec == NULL) { @@ -379,6 +379,7 @@ Cache<TagStore>::recvTimingSnoopResp(PacketPtr pkt) return; } + pkt->popSenderState(); pkt->setDest(rec->prevSrc); delete rec; // @todo someone should pay for this |