make io device be a little nicer about scheduling retries on the bus

--HG--
extra : convert_revision : 19a1f0c7bf79d6d8ef235aae60cdbbbcb7de2b79
This commit is contained in:
Ali Saidi 2006-05-31 13:45:37 -04:00
parent aa11330ddb
commit 0193c3fe7d

View file

@ -143,15 +143,19 @@ void
DmaPort::recvRetry() DmaPort::recvRetry()
{ {
Packet* pkt = transmitList.front(); Packet* pkt = transmitList.front();
DPRINTF(DMA, "Retry on Packet %#x with senderState: %#x\n", bool result = true;
pkt, pkt->senderState); while (result && transmitList.size()) {
if (sendTiming(pkt)) { DPRINTF(DMA, "Retry on Packet %#x with senderState: %#x\n",
DPRINTF(DMA, "-- Done\n"); pkt, pkt->senderState);
transmitList.pop_front(); result = sendTiming(pkt);
pendingCount--; if (result) {
assert(pendingCount >= 0); DPRINTF(DMA, "-- Done\n");
} else { transmitList.pop_front();
DPRINTF(DMA, "-- Failed, queued\n"); pendingCount--;
assert(pendingCount >= 0);
} else {
DPRINTF(DMA, "-- Failed, queued\n");
}
} }
} }
@ -201,7 +205,7 @@ DmaPort::sendDma(Packet *pkt)
if (state == Timing) { */ if (state == Timing) { */
DPRINTF(DMA, "Attempting to send Packet %#x with senderState: %#x\n", DPRINTF(DMA, "Attempting to send Packet %#x with senderState: %#x\n",
pkt, pkt->senderState); pkt, pkt->senderState);
if (!sendTiming(pkt)) { if (transmitList.size() || !sendTiming(pkt)) {
transmitList.push_back(pkt); transmitList.push_back(pkt);
DPRINTF(DMA, "-- Failed: queued\n"); DPRINTF(DMA, "-- Failed: queued\n");
} else { } else {