diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mem/packet_queue.cc | 9 | ||||
-rw-r--r-- | src/mem/packet_queue.hh | 20 |
2 files changed, 24 insertions, 5 deletions
diff --git a/src/mem/packet_queue.cc b/src/mem/packet_queue.cc index a9fe29e86..ca8422f52 100644 --- 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 @@ PacketQueue::schedSendTiming(PacketPtr pkt, Tick when, bool force_order) // 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()); } diff --git a/src/mem/packet_queue.hh b/src/mem/packet_queue.hh index 866a4477a..b1001e75d 100644 --- a/src/mem/packet_queue.hh +++ b/src/mem/packet_queue.hh @@ -89,6 +89,13 @@ class PacketQueue : public Drainable /** Event used to call processSendEvent. */ EventWrapper<PacketQueue, &PacketQueue::processSendEvent> 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 @@ class PacketQueue : public Drainable * * @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 @@ class PacketQueue : public Drainable */ 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; }; |