From 0193c3fe7d8512124ef6bd7cca4794e58f762f4c Mon Sep 17 00:00:00 2001 From: Ali Saidi Date: Wed, 31 May 2006 13:45:37 -0400 Subject: make io device be a little nicer about scheduling retries on the bus --HG-- extra : convert_revision : 19a1f0c7bf79d6d8ef235aae60cdbbbcb7de2b79 --- src/dev/io_device.cc | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'src/dev/io_device.cc') diff --git a/src/dev/io_device.cc b/src/dev/io_device.cc index 563fdb759..adf41799c 100644 --- a/src/dev/io_device.cc +++ b/src/dev/io_device.cc @@ -143,15 +143,19 @@ void DmaPort::recvRetry() { Packet* pkt = transmitList.front(); - DPRINTF(DMA, "Retry on Packet %#x with senderState: %#x\n", - pkt, pkt->senderState); - if (sendTiming(pkt)) { - DPRINTF(DMA, "-- Done\n"); - transmitList.pop_front(); - pendingCount--; - assert(pendingCount >= 0); - } else { - DPRINTF(DMA, "-- Failed, queued\n"); + bool result = true; + while (result && transmitList.size()) { + DPRINTF(DMA, "Retry on Packet %#x with senderState: %#x\n", + pkt, pkt->senderState); + result = sendTiming(pkt); + if (result) { + DPRINTF(DMA, "-- Done\n"); + transmitList.pop_front(); + pendingCount--; + assert(pendingCount >= 0); + } else { + DPRINTF(DMA, "-- Failed, queued\n"); + } } } @@ -201,7 +205,7 @@ DmaPort::sendDma(Packet *pkt) if (state == Timing) { */ DPRINTF(DMA, "Attempting to send Packet %#x with senderState: %#x\n", pkt, pkt->senderState); - if (!sendTiming(pkt)) { + if (transmitList.size() || !sendTiming(pkt)) { transmitList.push_back(pkt); DPRINTF(DMA, "-- Failed: queued\n"); } else { -- cgit v1.2.3 From cb0cf2dd8ab1cd60ef13de925ac862268c07297f Mon Sep 17 00:00:00 2001 From: Ali Saidi Date: Wed, 31 May 2006 19:26:56 -0400 Subject: Updated Authors from bk prs info --HG-- extra : convert_revision : 77f475b156d81c03a2811818fa23593d5615c685 --- src/dev/io_device.cc | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/dev/io_device.cc') diff --git a/src/dev/io_device.cc b/src/dev/io_device.cc index 1a118812c..f0509429f 100644 --- a/src/dev/io_device.cc +++ b/src/dev/io_device.cc @@ -24,6 +24,9 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Authors: Ali Saidi + * Nathan Binkert */ #include "base/trace.hh" -- cgit v1.2.3