From 59dd317cb5251c8cff714a94b5d772af201febbe Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Tue, 10 Oct 2006 22:10:08 -0400 Subject: Put in an accounting mechanism and an assert to make sure something doesn't try to send another packet while it's still waiting for the bus. --HG-- extra : convert_revision : 4a2b83111e49f71ca27e05c98b55bc3bac8d9f53 --- src/mem/bus.hh | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/mem/bus.hh') diff --git a/src/mem/bus.hh b/src/mem/bus.hh index 4affcd6ae..4f330230f 100644 --- a/src/mem/bus.hh +++ b/src/mem/bus.hh @@ -130,6 +130,8 @@ class Bus : public MemObject of the interfaces connecting to the bus. */ class BusPort : public Port { + bool _onRetryList; + /** A pointer to the bus to which this port belongs. */ Bus *bus; @@ -140,9 +142,15 @@ class Bus : public MemObject /** Constructor for the BusPort.*/ BusPort(const std::string &_name, Bus *_bus, int _id) - : Port(_name), bus(_bus), id(_id) + : Port(_name), _onRetryList(false), bus(_bus), id(_id) { } + bool onRetryList() + { return _onRetryList; } + + void onRetryList(bool newVal) + { _onRetryList = newVal; } + protected: /** When reciving a timing request from the peer port (at id), @@ -199,17 +207,19 @@ class Bus : public MemObject /** An array of pointers to the peer port interfaces connected to this bus.*/ - std::vector interfaces; + std::vector interfaces; /** An array of pointers to ports that retry should be called on because the * original send failed for whatever reason.*/ - std::list retryList; + std::list retryList; - void addToRetryList(Port * port) + void addToRetryList(BusPort * port) { if (!inRetry) { // The device wasn't retrying a packet, or wasn't at an appropriate // time. + assert(!port->onRetryList()); + port->onRetryList(true); retryList.push_back(port); } else { // The device was retrying a packet. It didn't work, so we'll leave -- cgit v1.2.3