diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2006-10-20 16:39:47 -0400 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2006-10-20 16:39:47 -0400 |
commit | 0b5cf4ba6eb2702ade2bc77c07842edd97eab264 (patch) | |
tree | 4e1ed8130794049e771759059269e6dc23848180 /src/mem/tport.cc | |
parent | 76c07ea46bc4f8f6d500f909abfb07addf217940 (diff) | |
parent | 6c6b78126a38cf92eef89f027312e1c7a063bd18 (diff) | |
download | gem5-0b5cf4ba6eb2702ade2bc77c07842edd97eab264.tar.xz |
Merge zizzer.eecs.umich.edu:/bk/newmem
into zeep.eecs.umich.edu:/home/gblack/m5/newmem
--HG--
extra : convert_revision : 2711fec2bf72801999b060e65f0bf744c18734fb
Diffstat (limited to 'src/mem/tport.cc')
-rw-r--r-- | src/mem/tport.cc | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/src/mem/tport.cc b/src/mem/tport.cc index 21907c0ca..55a461a8b 100644 --- a/src/mem/tport.cc +++ b/src/mem/tport.cc @@ -31,28 +31,27 @@ #include "mem/tport.hh" void -SimpleTimingPort::recvFunctional(Packet *pkt) +SimpleTimingPort::recvFunctional(PacketPtr pkt) { - //First check queued events - std::list<Packet *>::iterator i = transmitList.begin(); - std::list<Packet *>::iterator end = transmitList.end(); - bool cont = true; + std::list<PacketPtr>::iterator i = transmitList.begin(); + std::list<PacketPtr>::iterator end = transmitList.end(); - while (i != end && cont) { - Packet * target = *i; + while (i != end) { + PacketPtr target = *i; // If the target contains data, and it overlaps the // probed request, need to update data if (target->intersect(pkt)) fixPacket(pkt, target); } + //Then just do an atomic access and throw away the returned latency - if (cont) + if (pkt->result != Packet::Success) recvAtomic(pkt); } bool -SimpleTimingPort::recvTiming(Packet *pkt) +SimpleTimingPort::recvTiming(PacketPtr pkt) { // If the device is only a slave, it should only be sending // responses, which should never get nacked. There used to be @@ -66,6 +65,13 @@ SimpleTimingPort::recvTiming(Packet *pkt) pkt->makeTimingResponse(); sendTimingLater(pkt, latency); } + else { + if (pkt->cmd != Packet::UpgradeReq) + { + delete pkt->req; + delete pkt; + } + } return true; } |