mem: Fix sender state bug and delay popping
authorAndreas Hansson <andreas.hansson@arm.com>
Tue, 19 Feb 2013 17:57:47 +0000 (12:57 -0500)
committerAndreas Hansson <andreas.hansson@arm.com>
Tue, 19 Feb 2013 17:57:47 +0000 (12:57 -0500)
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.

src/mem/cache/cache_impl.hh

index 8f7938b931541997e609f34da96abee0f1589b0a..2be41642d5de4b7ee764089d36c3460c491b1030 100644 (file)
@@ -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