From 80607a2a1d32a15cabf9110e27855acb40a06f23 Mon Sep 17 00:00:00 2001 From: Matthew Poremba Date: Fri, 2 Dec 2016 11:40:40 -0500 Subject: [PATCH] ruby: Fix overflow reported by ASAN in MessageBuffer. In MessageBuffer the m_not_avail_count member is incremented but not used. This causes an overflow reported by ASAN. This patch changes from an int to Stats::Scalar, since the count is useful in debugging finite MessageBuffers. --- src/mem/ruby/network/MessageBuffer.cc | 10 +++++++++- src/mem/ruby/network/MessageBuffer.hh | 6 ++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/mem/ruby/network/MessageBuffer.cc b/src/mem/ruby/network/MessageBuffer.cc index b78e9aad0..557e0e80e 100644 --- a/src/mem/ruby/network/MessageBuffer.cc +++ b/src/mem/ruby/network/MessageBuffer.cc @@ -51,7 +51,6 @@ MessageBuffer::MessageBuffer(const Params *p) m_size_last_time_size_checked = 0; m_size_at_cycle_start = 0; m_msgs_this_cycle = 0; - m_not_avail_count = 0; m_priority_rank = 0; m_stall_msg_map.clear(); @@ -350,6 +349,15 @@ MessageBuffer::isReady(Tick current_time) const (m_prio_heap.front()->getLastEnqueueTime() <= current_time)); } +void +MessageBuffer::regStats() +{ + m_not_avail_count + .name(name() + ".not_avail_count") + .desc("Number of times this buffer did not have N slots available") + .flags(Stats::nozero); +} + uint32_t MessageBuffer::functionalWrite(Packet *pkt) { diff --git a/src/mem/ruby/network/MessageBuffer.hh b/src/mem/ruby/network/MessageBuffer.hh index 5c9e1089b..2a82887cd 100644 --- a/src/mem/ruby/network/MessageBuffer.hh +++ b/src/mem/ruby/network/MessageBuffer.hh @@ -116,6 +116,8 @@ class MessageBuffer : public SimObject void setIncomingLink(int link_id) { m_input_link_id = link_id; } void setVnet(int net) { m_vnet_id = net; } + void regStats(); + // Function for figuring out if any of the messages in the buffer need // to be updated with the data from the packet. // Return value indicates the number of messages that were updated. @@ -150,8 +152,8 @@ class MessageBuffer : public SimObject unsigned int m_size_at_cycle_start; unsigned int m_msgs_this_cycle; - int m_not_avail_count; // count the # of times I didn't have N - // slots available + Stats::Scalar m_not_avail_count; // count the # of times I didn't have N + // slots available uint64_t m_msg_counter; int m_priority_rank; const bool m_strict_fifo;