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.
This commit is contained in:
Matthew Poremba 2016-12-02 11:40:40 -05:00
parent 7520331402
commit 80607a2a1d
2 changed files with 13 additions and 3 deletions

View file

@ -51,7 +51,6 @@ MessageBuffer::MessageBuffer(const Params *p)
m_size_last_time_size_checked = 0; m_size_last_time_size_checked = 0;
m_size_at_cycle_start = 0; m_size_at_cycle_start = 0;
m_msgs_this_cycle = 0; m_msgs_this_cycle = 0;
m_not_avail_count = 0;
m_priority_rank = 0; m_priority_rank = 0;
m_stall_msg_map.clear(); m_stall_msg_map.clear();
@ -350,6 +349,15 @@ MessageBuffer::isReady(Tick current_time) const
(m_prio_heap.front()->getLastEnqueueTime() <= current_time)); (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 uint32_t
MessageBuffer::functionalWrite(Packet *pkt) MessageBuffer::functionalWrite(Packet *pkt)
{ {

View file

@ -116,6 +116,8 @@ class MessageBuffer : public SimObject
void setIncomingLink(int link_id) { m_input_link_id = link_id; } void setIncomingLink(int link_id) { m_input_link_id = link_id; }
void setVnet(int net) { m_vnet_id = net; } void setVnet(int net) { m_vnet_id = net; }
void regStats();
// Function for figuring out if any of the messages in the buffer need // Function for figuring out if any of the messages in the buffer need
// to be updated with the data from the packet. // to be updated with the data from the packet.
// Return value indicates the number of messages that were updated. // 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_size_at_cycle_start;
unsigned int m_msgs_this_cycle; unsigned int m_msgs_this_cycle;
int m_not_avail_count; // count the # of times I didn't have N Stats::Scalar m_not_avail_count; // count the # of times I didn't have N
// slots available // slots available
uint64_t m_msg_counter; uint64_t m_msg_counter;
int m_priority_rank; int m_priority_rank;
const bool m_strict_fifo; const bool m_strict_fifo;