diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mem/bus.cc | 15 | ||||
-rw-r--r-- | src/mem/bus.hh | 8 |
2 files changed, 6 insertions, 17 deletions
diff --git a/src/mem/bus.cc b/src/mem/bus.cc index 5ab7e5b04..730c612ca 100644 --- a/src/mem/bus.cc +++ b/src/mem/bus.cc @@ -136,8 +136,7 @@ template <typename SrcType, typename DstType> BaseBus::Layer<SrcType,DstType>::Layer(DstType& _port, BaseBus& _bus, const std::string& _name) : port(_port), bus(_bus), _name(_name), state(IDLE), drainManager(NULL), - retryingPort(NULL), waitingForPeer(NULL), - releaseEvent(this) + waitingForPeer(NULL), releaseEvent(this) { } @@ -190,9 +189,6 @@ BaseBus::Layer<SrcType,DstType>::tryTiming(SrcType* src_port) // update the state to busy state = BUSY; - // reset the retrying port - retryingPort = NULL; - return true; } @@ -243,7 +239,10 @@ BaseBus::Layer<SrcType,DstType>::releaseLayer() // bus layer is now idle, so if someone is waiting we can retry if (!waitingForLayer.empty()) { - retryWaiting(); + // there is no point in sending a retry if someone is still + // waiting for the peer + if (waitingForPeer == NULL) + retryWaiting(); } else if (waitingForPeer == NULL && drainManager) { DPRINTF(Drain, "Bus done draining, signaling drain manager\n"); //If we weren't able to drain before, do it now. @@ -268,8 +267,7 @@ BaseBus::Layer<SrcType,DstType>::retryWaiting() // set the retrying port to the front of the retry list and pop it // off the list - assert(retryingPort == NULL); - retryingPort = waitingForLayer.front(); + SrcType* retryingPort = waitingForLayer.front(); waitingForLayer.pop_front(); // tell the port to retry, which in some cases ends up calling the @@ -282,7 +280,6 @@ BaseBus::Layer<SrcType,DstType>::retryWaiting() // update the state to busy and reset the retrying port, we // have done our bit and sent the retry state = BUSY; - retryingPort = NULL; // occupy the bus layer until the next cycle ends occupyLayer(bus.clockEdge(Cycles(1))); diff --git a/src/mem/bus.hh b/src/mem/bus.hh index bdcf319f4..f01a3ae7f 100644 --- a/src/mem/bus.hh +++ b/src/mem/bus.hh @@ -221,14 +221,6 @@ class BaseBus : public MemObject std::deque<SrcType*> waitingForLayer; /** - * Port that we are currently in the process of telling to - * retry a previously failed attempt to perform a timing - * transaction. This is a valid port when in the retry state, - * and NULL when in busy or idle. - */ - SrcType* retryingPort; - - /** * Track who is waiting for the retry when receiving it from a * peer. If no port is waiting NULL is stored. */ |