diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2006-10-10 17:24:03 -0400 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2006-10-10 17:24:03 -0400 |
commit | 549412b33361629b03d9d85dac3bb3efa2f07baf (patch) | |
tree | 03995c9f63fafe5483716f96c8fc78a71e3360d0 /src/mem/bus.cc | |
parent | 5f9aca531d348bdc90585c41dcf9bf33201cc6cf (diff) | |
download | gem5-549412b33361629b03d9d85dac3bb3efa2f07baf.tar.xz |
Changed the bus to use a bool to keep track of retries rather than a pointer
src/mem/tport.cc:
minor formatting tweak
--HG--
extra : convert_revision : 7391d142815c5876fcc0f991bd053e6a1781c101
Diffstat (limited to 'src/mem/bus.cc')
-rw-r--r-- | src/mem/bus.cc | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/src/mem/bus.cc b/src/mem/bus.cc index 66cd581e7..3efaa93ac 100644 --- a/src/mem/bus.cc +++ b/src/mem/bus.cc @@ -68,13 +68,11 @@ Bus::init() } Bus::BusFreeEvent::BusFreeEvent(Bus *_bus) : Event(&mainEventQueue), bus(_bus) -{ - assert(!scheduled()); -} +{} void Bus::BusFreeEvent::process() { - bus->recvRetry(0); + bus->recvRetry(-1); } const char * Bus::BusFreeEvent::description() @@ -96,7 +94,7 @@ Bus::recvTiming(Packet *pkt) // If the bus is busy, or other devices are in line ahead of the current // one, put this device on the retry list. if (tickNextIdle > curTick || - (retryList.size() && pktPort != retryingPort)) { + (retryList.size() && (!inRetry || pktPort != retryList.front()))) { addToRetryList(pktPort); return false; } @@ -109,9 +107,9 @@ Bus::recvTiming(Packet *pkt) assert(success); if (pkt->flags & SATISFIED) { //Cache-Cache transfer occuring - if (retryingPort) { + if (inRetry) { retryList.pop_front(); - retryingPort = NULL; + inRetry = false; } return true; } @@ -182,9 +180,9 @@ Bus::recvTiming(Packet *pkt) if (port->sendTiming(pkt)) { // Packet was successfully sent. Return true. // Also take care of retries - if (retryingPort) { + if (inRetry) { retryList.pop_front(); - retryingPort = NULL; + inRetry = false; } return true; } @@ -199,14 +197,14 @@ Bus::recvRetry(int id) { // If there's anything waiting... if (retryList.size()) { - retryingPort = retryList.front(); - retryingPort->sendRetry(); - // If the retryingPort pointer isn't null, sendTiming wasn't called - if (retryingPort) { - warn("sendRetry didn't call sendTiming\n"); - retryList.pop_front(); - retryingPort = NULL; - } + //retryingPort = retryList.front(); + inRetry = true; + retryList.front()->sendRetry(); + // If inRetry is still true, sendTiming wasn't called + if (inRetry) + panic("Port %s didn't call sendTiming in it's recvRetry\n",\ + retryList.front()->getPeer()->name()); + //assert(!inRetry); } } |