Make the bus work if the other sides recvRetry doesn't call sendTiming for some reason.
--HG-- extra : convert_revision : e722ddb0354a5c021dc7c44a3e2f0a64e962442b
This commit is contained in:
parent
c9102b08fa
commit
a139e4394d
|
@ -214,9 +214,24 @@ Bus::recvRetry(int id)
|
||||||
retryList.front()->sendRetry();
|
retryList.front()->sendRetry();
|
||||||
// If inRetry is still true, sendTiming wasn't called
|
// If inRetry is still true, sendTiming wasn't called
|
||||||
if (inRetry)
|
if (inRetry)
|
||||||
panic("Port %s didn't call sendTiming in it's recvRetry\n",\
|
{
|
||||||
retryList.front()->getPeer()->name());
|
retryList.front()->onRetryList(false);
|
||||||
//assert(!inRetry);
|
retryList.pop_front();
|
||||||
|
inRetry = false;
|
||||||
|
|
||||||
|
//Bring tickNextIdle up to the present
|
||||||
|
while (tickNextIdle < curTick)
|
||||||
|
tickNextIdle += clock;
|
||||||
|
|
||||||
|
//Burn a cycle for the missed grant.
|
||||||
|
tickNextIdle += clock;
|
||||||
|
|
||||||
|
if (!busIdle.scheduled()) {
|
||||||
|
busIdle.schedule(tickNextIdle);
|
||||||
|
} else {
|
||||||
|
busIdle.reschedule(tickNextIdle);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue