changeset aa73a81cf92c in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=aa73a81cf92c
description:
        ruby: move stall and wakeup functions to AbstractController
        These functions are currently implemented in one of the files related 
to Slicc.
        Since these are purely C++ functions, they are better suited to be in 
the base
        class.

diffstat:

 src/mem/ruby/slicc_interface/AbstractController.cc |  84 ++++++++++++++++++++++
 src/mem/ruby/slicc_interface/AbstractController.hh |   7 +-
 src/mem/slicc/symbols/StateMachine.py              |  67 -----------------
 3 files changed, 90 insertions(+), 68 deletions(-)

diffs (206 lines):

diff -r 470016acf37d -r aa73a81cf92c 
src/mem/ruby/slicc_interface/AbstractController.cc
--- a/src/mem/ruby/slicc_interface/AbstractController.cc        Fri Mar 22 
15:53:23 2013 -0500
+++ b/src/mem/ruby/slicc_interface/AbstractController.cc        Fri Mar 22 
15:53:24 2013 -0500
@@ -86,3 +86,87 @@
     getQueuesFromPeer(c);
     c->getQueuesFromPeer(this);
 }
+
+void
+AbstractController::stallBuffer(MessageBuffer* buf, Address addr)
+{
+    if (m_waiting_buffers.count(addr) == 0) {
+        MsgVecType* msgVec = new MsgVecType;
+        msgVec->resize(m_max_in_port_rank, NULL);
+        m_waiting_buffers[addr] = msgVec;
+    }
+    (*(m_waiting_buffers[addr]))[m_cur_in_port_rank] = buf;
+}
+
+void
+AbstractController::wakeUpBuffers(Address addr)
+{
+    if (m_waiting_buffers.count(addr) > 0) {
+        //
+        // Wake up all possible lower rank (i.e. lower priority) buffers that 
could
+        // be waiting on this message.
+        //
+        for (int in_port_rank = m_cur_in_port_rank - 1;
+             in_port_rank >= 0;
+             in_port_rank--) {
+            if ((*(m_waiting_buffers[addr]))[in_port_rank] != NULL) {
+                
(*(m_waiting_buffers[addr]))[in_port_rank]->reanalyzeMessages(addr);
+            }
+        }
+        delete m_waiting_buffers[addr];
+        m_waiting_buffers.erase(addr);
+    }
+}
+
+void
+AbstractController::wakeUpAllBuffers(Address addr)
+{
+    if (m_waiting_buffers.count(addr) > 0) {
+        //
+        // Wake up all possible lower rank (i.e. lower priority) buffers that 
could
+        // be waiting on this message.
+        //
+        for (int in_port_rank = m_max_in_port_rank - 1;
+             in_port_rank >= 0;
+             in_port_rank--) {
+            if ((*(m_waiting_buffers[addr]))[in_port_rank] != NULL) {
+                
(*(m_waiting_buffers[addr]))[in_port_rank]->reanalyzeMessages(addr);
+            }
+        }
+        delete m_waiting_buffers[addr];
+        m_waiting_buffers.erase(addr);
+    }
+}
+
+void
+AbstractController::wakeUpAllBuffers()
+{
+    //
+    // Wake up all possible buffers that could be waiting on any message.
+    //
+
+    std::vector<MsgVecType*> wokeUpMsgVecs;
+
+    if(m_waiting_buffers.size() > 0) {
+        for (WaitingBufType::iterator buf_iter = m_waiting_buffers.begin();
+             buf_iter != m_waiting_buffers.end();
+             ++buf_iter) {
+             for (MsgVecType::iterator vec_iter = buf_iter->second->begin();
+                  vec_iter != buf_iter->second->end();
+                  ++vec_iter) {
+                  if (*vec_iter != NULL) {
+                      (*vec_iter)->reanalyzeAllMessages();
+                  }
+             }
+             wokeUpMsgVecs.push_back(buf_iter->second);
+        }
+
+        for (std::vector<MsgVecType*>::iterator wb_iter = 
wokeUpMsgVecs.begin();
+             wb_iter != wokeUpMsgVecs.end();
+             ++wb_iter) {
+             delete (*wb_iter);
+        }
+
+        m_waiting_buffers.clear();
+    }
+}
diff -r 470016acf37d -r aa73a81cf92c 
src/mem/ruby/slicc_interface/AbstractController.hh
--- a/src/mem/ruby/slicc_interface/AbstractController.hh        Fri Mar 22 
15:53:23 2013 -0500
+++ b/src/mem/ruby/slicc_interface/AbstractController.hh        Fri Mar 22 
15:53:24 2013 -0500
@@ -33,6 +33,7 @@
 #include <string>
 
 #include "mem/protocol/AccessPermission.hh"
+#include "mem/ruby/buffers/MessageBuffer.hh"
 #include "mem/ruby/common/Address.hh"
 #include "mem/ruby/common/Consumer.hh"
 #include "mem/ruby/common/DataBlock.hh"
@@ -44,7 +45,6 @@
 #include "params/RubyController.hh"
 #include "sim/clocked_object.hh"
 
-class MessageBuffer;
 class Network;
 
 class AbstractController : public ClockedObject, public Consumer
@@ -116,6 +116,11 @@
     virtual void getQueuesFromPeer(AbstractController *)
     { fatal("getQueuesFromPeer() should be called only if implemented!"); }
 
+    void stallBuffer(MessageBuffer* buf, Address addr);
+    void wakeUpBuffers(Address addr);
+    void wakeUpAllBuffers(Address addr);
+    void wakeUpAllBuffers();
+
   protected:
     int m_transitions_per_cycle;
     int m_buffer_size;
diff -r 470016acf37d -r aa73a81cf92c src/mem/slicc/symbols/StateMachine.py
--- a/src/mem/slicc/symbols/StateMachine.py     Fri Mar 22 15:53:23 2013 -0500
+++ b/src/mem/slicc/symbols/StateMachine.py     Fri Mar 22 15:53:24 2013 -0500
@@ -262,9 +262,6 @@
     const int & getVersion() const;
     const std::string toString() const;
     const std::string getName() const;
-    void stallBuffer(MessageBuffer* buf, Address addr);
-    void wakeUpBuffers(Address addr);
-    void wakeUpAllBuffers();
     void initNetworkPtr(Network* net_ptr) { m_net_ptr = net_ptr; }
     void print(std::ostream& out) const;
     void wakeup();
@@ -749,70 +746,6 @@
 }
 
 void
-$c_ident::stallBuffer(MessageBuffer* buf, Address addr)
-{
-    if (m_waiting_buffers.count(addr) == 0) {
-        MsgVecType* msgVec = new MsgVecType;
-        msgVec->resize(m_max_in_port_rank, NULL);
-        m_waiting_buffers[addr] = msgVec;
-    }
-    (*(m_waiting_buffers[addr]))[m_cur_in_port_rank] = buf;
-}
-
-void
-$c_ident::wakeUpBuffers(Address addr)
-{
-    if (m_waiting_buffers.count(addr) > 0) {
-        //
-        // Wake up all possible lower rank (i.e. lower priority) buffers that 
could
-        // be waiting on this message.
-        //
-        for (int in_port_rank = m_cur_in_port_rank - 1;
-             in_port_rank >= 0;
-             in_port_rank--) {
-            if ((*(m_waiting_buffers[addr]))[in_port_rank] != NULL) {
-                
(*(m_waiting_buffers[addr]))[in_port_rank]->reanalyzeMessages(addr);
-            }
-        }
-        delete m_waiting_buffers[addr];
-        m_waiting_buffers.erase(addr);
-    }
-}
-
-void
-$c_ident::wakeUpAllBuffers()
-{
-    //
-    // Wake up all possible buffers that could be waiting on any message.
-    //
-
-    std::vector<MsgVecType*> wokeUpMsgVecs;
-    
-    if(m_waiting_buffers.size() > 0) {
-        for (WaitingBufType::iterator buf_iter = m_waiting_buffers.begin();
-             buf_iter != m_waiting_buffers.end();
-             ++buf_iter) {
-             for (MsgVecType::iterator vec_iter = buf_iter->second->begin();
-                  vec_iter != buf_iter->second->end();
-                  ++vec_iter) {
-                  if (*vec_iter != NULL) {
-                      (*vec_iter)->reanalyzeAllMessages();
-                  }
-             }
-             wokeUpMsgVecs.push_back(buf_iter->second);
-        }
-
-        for (std::vector<MsgVecType*>::iterator wb_iter = 
wokeUpMsgVecs.begin();
-             wb_iter != wokeUpMsgVecs.end();
-             ++wb_iter) {
-             delete (*wb_iter);
-        }
-
-        m_waiting_buffers.clear();
-    }
-}
-
-void
 $c_ident::blockOnQueue(Address addr, MessageBuffer* port)
 {
     m_is_blocking = true;
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to