diff --git a/src/mem/ruby/network/MessageBuffer.cc b/src/mem/ruby/network/MessageBuffer.cc index 6e14de1766..3db8515a37 100644 --- a/src/mem/ruby/network/MessageBuffer.cc +++ b/src/mem/ruby/network/MessageBuffer.cc @@ -394,6 +394,12 @@ MessageBuffer::stallMessage(Addr addr, Tick current_time) m_stall_count++; } +bool +MessageBuffer::hasStalledMsg(Addr addr) const +{ + return (m_stall_msg_map.count(addr) != 0); +} + void MessageBuffer::deferEnqueueingMessage(Addr addr, MsgPtr message) { diff --git a/src/mem/ruby/network/MessageBuffer.hh b/src/mem/ruby/network/MessageBuffer.hh index 01c0767e2c..8abf3bd636 100644 --- a/src/mem/ruby/network/MessageBuffer.hh +++ b/src/mem/ruby/network/MessageBuffer.hh @@ -74,6 +74,8 @@ class MessageBuffer : public SimObject void reanalyzeMessages(Addr addr, Tick current_time); void reanalyzeAllMessages(Tick current_time); void stallMessage(Addr addr, Tick current_time); + // return true if the stall map has a message of this address + bool hasStalledMsg(Addr addr) const; // TRUE if head of queue timestamp <= SystemTime bool isReady(Tick current_time) const; @@ -124,7 +126,6 @@ class MessageBuffer : public SimObject // enqueue all previously deferred messages that are associated with the // input address void enqueueDeferredMessages(Addr addr, Tick curTime, Tick delay); - bool isDeferredMsgMapEmpty(Addr addr) const; //! Updates the delay cycles of the message at the head of the queue, diff --git a/src/mem/ruby/protocol/RubySlicc_Types.sm b/src/mem/ruby/protocol/RubySlicc_Types.sm index bcadc3dc4d..b59cf97170 100644 --- a/src/mem/ruby/protocol/RubySlicc_Types.sm +++ b/src/mem/ruby/protocol/RubySlicc_Types.sm @@ -63,6 +63,7 @@ structure(InPort, external = "yes", primitive="yes") { bool isEmpty(); bool isStallMapEmpty(); int getStallMapSize(); + bool hasStalledMsg(Addr addr); } external_type(NodeID, default="0", primitive="yes");