From: Ali Saidi Date: Tue, 31 Oct 2006 18:23:17 +0000 (-0500) Subject: add the ability to insert into the middle of the timing port send list X-Git-Tag: m5_2.0_beta2~70^2^2~1 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c68f7feaa8bcecaf28f4110fc98b5d57bc755061;p=gem5.git add the ability to insert into the middle of the timing port send list --HG-- extra : convert_revision : 5422025f74ba7013f98d1d1dcbd1070f580aae61 --- diff --git a/src/mem/tport.cc b/src/mem/tport.cc index b9d5cbe4a..086d91279 100644 --- a/src/mem/tport.cc +++ b/src/mem/tport.cc @@ -44,6 +44,7 @@ SimpleTimingPort::recvFunctional(PacketPtr pkt) if (target->intersect(pkt)) done = fixPacket(pkt, target); + i++; } //Then just do an atomic access and throw away the returned latency @@ -98,11 +99,29 @@ SimpleTimingPort::recvRetry() void SimpleTimingPort::sendTiming(PacketPtr pkt, Tick time) { + // Nothing is on the list: add it and schedule an event if (transmitList.empty()) { assert(!sendEvent.scheduled()); sendEvent.schedule(curTick+time); + transmitList.push_back(std::pair(time+curTick,pkt)); + return; + } + + // something is on the list and this belongs at the end + if (time+curTick >= transmitList.back().first) { + transmitList.push_back(std::pair(time+curTick,pkt)); + return; + } + // Something is on the list and this belongs somewhere else + std::list >::iterator i = transmitList.begin(); + std::list >::iterator end = transmitList.end(); + bool done = false; + + while (i != end && !done) { + if (time+curTick < i->first) + transmitList.insert(i,std::pair(time+curTick,pkt)); + i++; } - transmitList.push_back(std::pair(time+curTick,pkt)); } void