mem: Add sanity check to packet queue size
authorAndreas Hansson <andreas.hansson@arm.com>
Mon, 7 Jan 2013 18:05:35 +0000 (13:05 -0500)
committerAndreas Hansson <andreas.hansson@arm.com>
Mon, 7 Jan 2013 18:05:35 +0000 (13:05 -0500)
This patch adds a basic check to ensure that the packet queue does not
grow absurdly large. The queue should only be used to store packets
that were delayed due to blocking from the neighbouring port, and not
for actual storage. Thus, a limit of 100 has been chosen for now
(which is already quite substantial).

src/mem/packet_queue.cc

index 8030cb38f342be2754baa48d9d5e14d83d6bb6f8..e60e77453b4c1e99292eb18af308d9e797cd6c2b 100644 (file)
@@ -113,6 +113,13 @@ PacketQueue::schedSendTiming(PacketPtr pkt, Tick when, bool send_as_snoop)
     // express snoops should never be queued
     assert(!pkt->isExpressSnoop());
 
+    // add a very basic sanity check on the port to ensure the
+    // invisible buffer is not growing beyond reasonable limits
+    if (transmitList.size() > 100) {
+        panic("Packet queue %s has grown beyond 100 packets\n",
+              name());
+    }
+
     // nothing on the list, or earlier than current front element,
     // schedule an event
     if (transmitList.empty() || when < transmitList.front().tick) {