diff options
Diffstat (limited to 'src/mem/cache/cache_impl.hh')
-rw-r--r-- | src/mem/cache/cache_impl.hh | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/mem/cache/cache_impl.hh b/src/mem/cache/cache_impl.hh index 3f3dc6877..4f4d720b6 100644 --- a/src/mem/cache/cache_impl.hh +++ b/src/mem/cache/cache_impl.hh @@ -900,9 +900,10 @@ Cache<TagStore>::handleResponse(PacketPtr pkt) assert(!target->pkt->req->isUncacheable()); missLatency[target->pkt->cmdToIndex()][0/*pkt->req->threadId()*/] += completion_time - target->recvTime; - } else if (target->pkt->cmd == MemCmd::StoreCondReq && - pkt->cmd == MemCmd::UpgradeFailResp) { + } else if (pkt->cmd == MemCmd::UpgradeFailResp) { // failed StoreCond upgrade + assert(target->pkt->cmd == MemCmd::StoreCondReq || + target->pkt->cmd == MemCmd::StoreCondFailReq); completion_time = tags->getHitLatency() + pkt->finishTime; target->pkt->req->setExtraData(0); } else { @@ -1443,10 +1444,11 @@ Cache<TagStore>::getTimingPacket() PacketPtr tgt_pkt = mshr->getTarget()->pkt; PacketPtr pkt = NULL; - if (tgt_pkt->cmd == MemCmd::SCUpgradeFailReq) { - // SCUpgradeReq saw invalidation while queued in MSHR, so now - // that we are getting around to processing it, just treat it - // as if we got a failure response + if (tgt_pkt->cmd == MemCmd::SCUpgradeFailReq || + tgt_pkt->cmd == MemCmd::StoreCondFailReq) { + // SCUpgradeReq or StoreCondReq saw invalidation while queued + // in MSHR, so now that we are getting around to processing + // it, just treat it as if we got a failure response pkt = new Packet(tgt_pkt); pkt->cmd = MemCmd::UpgradeFailResp; pkt->senderState = mshr; |