diff --git a/src/mem/packet_queue.hh b/src/mem/packet_queue.hh --- a/src/mem/packet_queue.hh +++ b/src/mem/packet_queue.hh @@ -89,6 +89,13 @@ /** Event used to call processSendEvent. */ EventWrapper sendEvent; + /* + * Optionally disable the sanity check + * on the size of the transmitList. The + * sanity check will be enabled by default. + */ + bool _disableSanityCheck; + protected: /** Label to use for print request packets label stack. */ @@ -123,8 +130,11 @@ * * @param _em Event manager used for scheduling this queue * @param _label Label to push on the label stack for print request packets + * @param disable_sanity_check Flag used to disable the sanity check + * on the size of the transmitList. The check is enabled by default. */ - PacketQueue(EventManager& _em, const std::string& _label); + PacketQueue(EventManager& _em, const std::string& _label, + bool disable_sanity_check = false); /** * Virtual desctructor since the class may be used as a base class. @@ -187,6 +197,14 @@ */ void retry(); + /** + * This allows a user to explicitly disable the sanity check + * on the size of the transmitList, which is enabled by default. + * Users must use this function to explicitly disable the sanity + * check. + */ + void disableSanityCheck() { _disableSanityCheck = true; } + DrainState drain() override; }; # Node ID 7b7e352f8d7f30c67def98382d9b8bf4a63ac8a9 # Parent 2375b33bddc61ea484b3bd194ba02f7889095624 diff --git a/src/mem/packet_queue.cc b/src/mem/packet_queue.cc --- a/src/mem/packet_queue.cc +++ b/src/mem/packet_queue.cc @@ -48,9 +48,10 @@ using namespace std; -PacketQueue::PacketQueue(EventManager& _em, const std::string& _label) - : em(_em), sendEvent(this), label(_label), - waitingOnRetry(false) +PacketQueue::PacketQueue(EventManager& _em, const std::string& _label, + bool disable_sanity_check) + : em(_em), sendEvent(this), _disableSanityCheck(disable_sanity_check), + label(_label), waitingOnRetry(false) { } @@ -114,7 +115,7 @@ // add a very basic sanity check on the port to ensure the // invisible buffer is not growing beyond reasonable limits - if (transmitList.size() > 100) { + if (!_disableSanityCheck && transmitList.size() > 100) { panic("Packet queue %s has grown beyond 100 packets\n", name()); }