diff -r 00a8773f7268 -r 97dc170a3064 src/mem/ruby/slicc_interface/Message.hh --- a/src/mem/ruby/slicc_interface/Message.hh Mon Jul 20 16:10:38 2015 -0500 +++ b/src/mem/ruby/slicc_interface/Message.hh Mon Jul 20 16:10:41 2015 -0500 @@ -103,6 +103,8 @@ int getVnet() const { return vnet; } void setVnet(int net) { vnet = net; } + virtual bool bypassBlocked() const { return false; } + private: const Tick m_time; Tick m_LastEnqueueTime; // my last enqueue time diff -r 00a8773f7268 -r 97dc170a3064 src/mem/ruby/slicc_interface/RubyRequest.hh --- a/src/mem/ruby/slicc_interface/RubyRequest.hh Mon Jul 20 16:10:38 2015 -0500 +++ b/src/mem/ruby/slicc_interface/RubyRequest.hh Mon Jul 20 16:10:41 2015 -0500 @@ -85,6 +85,8 @@ void print(std::ostream& out) const; bool functionalRead(Packet *pkt); bool functionalWrite(Packet *pkt); + + bool bypassBlocked() const { return (m_Type == RubyRequestType_Locked_RMW_Write); } }; inline std::ostream& diff -r 00a8773f7268 -r 97dc170a3064 src/mem/slicc/ast/PeekStatementAST.py --- a/src/mem/slicc/ast/PeekStatementAST.py Mon Jul 20 16:10:38 2015 -0500 +++ b/src/mem/slicc/ast/PeekStatementAST.py Mon Jul 20 16:10:41 2015 -0500 @@ -70,7 +70,8 @@ code(''' if (m_is_blocking && (m_block_map.count(in_msg_ptr->m_$address_field) == 1) && - (m_block_map[in_msg_ptr->m_$address_field] != &$qcode)) { + ((m_block_map[in_msg_ptr->m_$address_field] != &$qcode) || + (in_msg_ptr->bypassBlocked() ))) { $qcode.delayHead(); continue; }