eon is a tru64 regression, not a linux one
[gem5.git] / src / mem / tport.cc
index 086d912792242f87c1a70448bdb7fe5d2af0e325..b384a0444e4b9ddd1c68431b1f8a0268937e02b7 100644 (file)
@@ -35,14 +35,14 @@ SimpleTimingPort::recvFunctional(PacketPtr pkt)
 {
     std::list<std::pair<Tick,PacketPtr> >::iterator i = transmitList.begin();
     std::list<std::pair<Tick,PacketPtr> >::iterator end = transmitList.end();
-    bool done = false;
+    bool notDone = true;
 
-    while (i != end && !done) {
+    while (i != end && notDone) {
         PacketPtr target = i->second;
         // If the target contains data, and it overlaps the
         // probed request, need to update data
         if (target->intersect(pkt))
-            done = fixPacket(pkt, target);
+            notDone = fixPacket(pkt, target);
 
         i++;
     }
@@ -68,7 +68,7 @@ SimpleTimingPort::recvTiming(PacketPtr pkt)
         sendTiming(pkt, latency);
     }
     else {
-        if (pkt->cmd != Packet::UpgradeReq)
+        if (pkt->cmd != MemCmd::UpgradeReq)
         {
             delete pkt->req;
             delete pkt;
@@ -118,8 +118,14 @@ SimpleTimingPort::sendTiming(PacketPtr pkt, Tick time)
     bool done = false;
 
     while (i != end && !done) {
-        if (time+curTick < i->first)
+        if (time+curTick < i->first) {
+            if (i == transmitList.begin()) {
+                //Inserting at begining, reschedule
+                sendEvent.reschedule(time+curTick);
+            }
             transmitList.insert(i,std::pair<Tick,PacketPtr>(time+curTick,pkt));
+            done = true;
+        }
         i++;
     }
 }