ruby: register multiple memory controllers
authorNilay Vaish <nilay@cs.wisc.edu>
Mon, 15 Oct 2012 22:27:17 +0000 (17:27 -0500)
committerNilay Vaish <nilay@cs.wisc.edu>
Mon, 15 Oct 2012 22:27:17 +0000 (17:27 -0500)
Currently the Ruby System maintains pointer to only one of the memory
controllers. But there can be multiple controllers in the system. This
patch adds a vector of memory controllers.

src/mem/ruby/system/System.cc
src/mem/ruby/system/System.hh

index 6e144a7030c2e2fbf09f2cf19e6e956ae3b7bb22..b41f2d727a94d4547496cc7f550f038501be21dd 100644 (file)
@@ -119,7 +119,7 @@ RubySystem::registerSparseMemory(SparseMemory* s)
 
 void
 RubySystem::registerMemController(MemoryControl *mc) {
-    m_memory_controller = mc;
+    m_memory_controller_vec.push_back(mc);
 }
 
 RubySystem::~RubySystem()
@@ -365,9 +365,13 @@ RubySystem::startup()
         delete m_cache_recorder;
         m_cache_recorder = NULL;
         m_warmup_enabled = false;
+
         // reset DRAM so that it's not waiting for events on the old event
         // queue
-        m_memory_controller->reset();
+        for (int i = 0; i < m_memory_controller_vec.size(); ++i) {
+            m_memory_controller_vec[i]->reset();
+        }
+
         // Restore eventq head
         eventq_head = eventq->replaceHead(eventq_head);
         // Restore curTick and Ruby System's clock
index e9e46fedf3fa77b0752f27a3b773d182b6096388..245fa677e57b0b9a9c5dffc62446a586a346c075 100644 (file)
@@ -152,12 +152,12 @@ class RubySystem : public ClockedObject
     static int m_memory_size_bits;
 
     Network* m_network_ptr;
-    MemoryControl *m_memory_controller;
+    std::vector<MemoryControl *> m_memory_controller_vec;
+    std::vector<AbstractController *> m_abs_cntrl_vec;
 
   public:
     Profiler* m_profiler_ptr;
     MemoryVector* m_mem_vec_ptr;
-    std::vector<AbstractController*> m_abs_cntrl_vec;
     bool m_warmup_enabled;
     bool m_cooldown_enabled;
     CacheRecorder* m_cache_recorder;