From b4efb48a71c42085134e57840aa9562884404d11 Mon Sep 17 00:00:00 2001 From: Nilay Vaish Date: Sat, 4 Jul 2015 10:43:46 -0500 Subject: ruby: remove message buffer node This structure's only purpose was to provide a comparison function for ordering messages in the MessageBuffer. The comparison function is now being moved to the Message class itself. So we no longer require this structure. --- src/mem/ruby/structures/WireBuffer.cc | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) (limited to 'src/mem/ruby/structures/WireBuffer.cc') diff --git a/src/mem/ruby/structures/WireBuffer.cc b/src/mem/ruby/structures/WireBuffer.cc index 702a53f16..3308dbe8e 100644 --- a/src/mem/ruby/structures/WireBuffer.cc +++ b/src/mem/ruby/structures/WireBuffer.cc @@ -77,8 +77,9 @@ WireBuffer::enqueue(MsgPtr message, Cycles latency) Cycles arrival_time = current_time + latency; assert(arrival_time > current_time); - MessageBufferNode thisNode(arrival_time, m_msg_counter, message); - m_message_queue.push_back(thisNode); + Message* msg_ptr = message.get(); + msg_ptr->setLastEnqueueTime(arrival_time); + m_message_queue.push_back(message); if (m_consumer_ptr != NULL) { m_consumer_ptr-> scheduleEventAbsolute(g_system_ptr->clockPeriod() * arrival_time); @@ -92,27 +93,18 @@ WireBuffer::dequeue() { assert(isReady()); pop_heap(m_message_queue.begin(), m_message_queue.end(), - greater()); + greater()); m_message_queue.pop_back(); } const Message* WireBuffer::peek() { - MessageBufferNode node = peekNode(); - Message* msg_ptr = node.m_msgptr.get(); + Message* msg_ptr = m_message_queue.front().get(); assert(msg_ptr != NULL); return msg_ptr; } -MessageBufferNode -WireBuffer::peekNode() -{ - assert(isReady()); - MessageBufferNode req = m_message_queue.front(); - return req; -} - void WireBuffer::recycle() { @@ -121,23 +113,23 @@ WireBuffer::recycle() // Wire-like situations because you don't want to deadlock as a result of // being stuck behind something if you're not actually supposed to. assert(isReady()); - MessageBufferNode node = m_message_queue.front(); - pop_heap(m_message_queue.begin(), m_message_queue.end(), - greater()); + MsgPtr node = m_message_queue.front(); + pop_heap(m_message_queue.begin(), m_message_queue.end(), greater()); - node.m_time = g_system_ptr->curCycle() + Cycles(1); + node->setLastEnqueueTime(g_system_ptr->curCycle() + Cycles(1)); m_message_queue.back() = node; push_heap(m_message_queue.begin(), m_message_queue.end(), - greater()); + greater()); m_consumer_ptr-> - scheduleEventAbsolute(g_system_ptr->clockPeriod() * node.m_time); + scheduleEventAbsolute(g_system_ptr->curCycle() + Cycles(1)); } bool WireBuffer::isReady() { return ((!m_message_queue.empty()) && - (m_message_queue.front().m_time <= g_system_ptr->curCycle())); + (m_message_queue.front()->getLastEnqueueTime() <= + g_system_ptr->curCycle())); } void @@ -155,4 +147,3 @@ RubyWireBufferParams::create() { return new WireBuffer(this); } - -- cgit v1.2.3