summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/packet_queue.cc9
-rw-r--r--src/mem/packet_queue.hh20
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;
};