CPU: Fix bug when a split transaction is issued to a faster cache
In the case of a split transaction and a cache that is faster than a CPU we could get two responses before next_tick expires. Add an event that is scheduled in this case and return false rather than asserting.
This commit is contained in:
@@ -999,7 +999,16 @@ TimingSimpleCPU::DcachePort::recvTiming(PacketPtr pkt)
|
||||
if (next_tick == curTick) {
|
||||
cpu->completeDataAccess(pkt);
|
||||
} else {
|
||||
tickEvent.schedule(pkt, next_tick);
|
||||
if (!tickEvent.scheduled()) {
|
||||
tickEvent.schedule(pkt, next_tick);
|
||||
} else {
|
||||
// In the case of a split transaction and a cache that is
|
||||
// faster than a CPU we could get two responses before
|
||||
// next_tick expires
|
||||
if (!retryEvent.scheduled())
|
||||
schedule(retryEvent, next_tick);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user