summaryrefslogtreecommitdiff
path: root/src/cpu/simple/timing.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/simple/timing.cc')
-rw-r--r--src/cpu/simple/timing.cc24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/cpu/simple/timing.cc b/src/cpu/simple/timing.cc
index 45da7c3eb..fa7bb4f86 100644
--- a/src/cpu/simple/timing.cc
+++ b/src/cpu/simple/timing.cc
@@ -574,10 +574,16 @@ TimingSimpleCPU::IcachePort::recvTiming(PacketPtr pkt)
return true;
}
- else {
- //Snooping a Coherence Request, do nothing
- return true;
+ else if (pkt->result == Packet::Nacked) {
+ assert(cpu->_status == IcacheWaitResponse);
+ pkt->reinitNacked();
+ if (!sendTiming(pkt)) {
+ cpu->_status = IcacheRetry;
+ cpu->ifetch_pkt = pkt;
+ }
}
+ //Snooping a Coherence Request, do nothing
+ return true;
}
void
@@ -663,10 +669,16 @@ TimingSimpleCPU::DcachePort::recvTiming(PacketPtr pkt)
return true;
}
- else {
- //Snooping a coherence req, do nothing
- return true;
+ else if (pkt->result == Packet::Nacked) {
+ assert(cpu->_status == DcacheWaitResponse);
+ pkt->reinitNacked();
+ if (!sendTiming(pkt)) {
+ cpu->_status = DcacheRetry;
+ cpu->dcache_pkt = pkt;
+ }
}
+ //Snooping a Coherence Request, do nothing
+ return true;
}
void