ruby: replace global g_abs_controls with per-RubySystem var
authorBrandon Potter <brandon.potter@amd.com>
Fri, 10 Jul 2015 21:05:24 +0000 (16:05 -0500)
committerBrandon Potter <brandon.potter@amd.com>
Fri, 10 Jul 2015 21:05:24 +0000 (16:05 -0500)
This is another step in the process of removing global variables
from Ruby to enable multiple RubySystem instances in a single simulation.

The list of abstract controllers is per-RubySystem and should be
represented that way, rather than as a global.

Since this is the last remaining Ruby global variable, the
src/mem/ruby/Common/Global.* files are also removed.

23 files changed:
src/cpu/testers/directedtest/RubyDirectedTester.hh
src/cpu/testers/rubytest/Check.hh
src/cpu/testers/rubytest/CheckTable.hh
src/cpu/testers/rubytest/RubyTester.cc
src/cpu/testers/rubytest/RubyTester.hh
src/mem/ruby/common/Global.cc [deleted file]
src/mem/ruby/common/Global.hh [deleted file]
src/mem/ruby/common/SConscript
src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc
src/mem/ruby/network/garnet/fixed-pipeline/OutVcState_d.cc
src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc
src/mem/ruby/network/simple/Throttle.hh
src/mem/ruby/profiler/AccessTraceForAddress.hh
src/mem/ruby/profiler/Profiler.cc
src/mem/ruby/profiler/Profiler.hh
src/mem/ruby/structures/RubyMemoryControl.cc
src/mem/ruby/structures/RubyMemoryControl.hh
src/mem/ruby/structures/TimerTable.cc
src/mem/ruby/system/Sequencer.cc
src/mem/ruby/system/System.cc
src/mem/ruby/system/System.hh
src/mem/slicc/symbols/StateMachine.py
src/mem/slicc/symbols/Type.py

index 0e3b1002ad921ad895f960eb7448f8b57fb85bcd..b148c390c99c32b2f2a8da2e88683b87bd258598 100644 (file)
@@ -35,7 +35,6 @@
 #include <vector>
 
 #include "mem/ruby/common/DataBlock.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/common/SubBlock.hh"
 #include "mem/ruby/system/RubyPort.hh"
 #include "mem/mem_object.hh"
index 3e8061ee7533e989bc2a337b1a0e9729cd5c3e01..a477cefeb78be591922407df7dfd8d8a9f2378b3 100644 (file)
@@ -36,7 +36,6 @@
 #include "mem/protocol/RubyAccessMode.hh"
 #include "mem/protocol/TesterStatus.hh"
 #include "mem/ruby/common/Address.hh"
-#include "mem/ruby/common/Global.hh"
 
 class SubBlock;
 
index 35ea7440a13a4cc107f00021e6de12f29d0b1f34..f03ad067d15607fb562a2e987c74502d824f9cc4 100644 (file)
@@ -35,7 +35,6 @@
 
 #include "base/hashmap.hh"
 #include "mem/ruby/common/Address.hh"
-#include "mem/ruby/common/Global.hh"
 
 class Check;
 class RubyTester;
index 6ac2526127d7f504f8e2cce016475d3b4c87e144..e0b689978e929a3052ecbe7e11f30500403c05a4 100644 (file)
@@ -43,7 +43,6 @@
 #include "cpu/testers/rubytest/Check.hh"
 #include "cpu/testers/rubytest/RubyTester.hh"
 #include "debug/RubyTest.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/common/SubBlock.hh"
 #include "mem/ruby/system/System.hh"
 #include "sim/sim_exit.hh"
index c0ad554c6256fb5f49de088d0a80326466e2ed42..1b1882da760b2921cf5ea8d931c1a6f41c6a6e33 100644 (file)
@@ -47,7 +47,6 @@
 #include <vector>
 
 #include "cpu/testers/rubytest/CheckTable.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/common/SubBlock.hh"
 #include "mem/ruby/system/RubyPort.hh"
 #include "mem/mem_object.hh"
diff --git a/src/mem/ruby/common/Global.cc b/src/mem/ruby/common/Global.cc
deleted file mode 100644 (file)
index c82a9c7..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "mem/ruby/common/Global.hh"
-
-using namespace std;
-
-vector<map<uint32_t, AbstractController *> > g_abs_controls;
diff --git a/src/mem/ruby/common/Global.hh b/src/mem/ruby/common/Global.hh
deleted file mode 100644 (file)
index 2b07ffb..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MEM_RUBY_COMMON_GLOBAL_HH__
-#define __MEM_RUBY_COMMON_GLOBAL_HH__
-
-#include <map>
-#include <vector>
-
-#include "base/str.hh"
-#include "base/types.hh"
-
-class AbstractController;
-extern std::vector<std::map<uint32_t, AbstractController *> > g_abs_controls;
-
-#endif // __MEM_RUBY_COMMON_GLOBAL_HH__
index c7e774b47e56e6da28071005b3900526a725e75a..3c149388a376b5fcfd5f3e8ed4766e35cee0cf59 100644 (file)
@@ -36,7 +36,6 @@ if env['PROTOCOL'] == 'None':
 Source('Address.cc')
 Source('Consumer.cc')
 Source('DataBlock.cc')
-Source('Global.cc')
 Source('Histogram.cc')
 Source('NetDest.cc')
 Source('Set.cc')
index d16db76ca6edd8f5aa3a4e1d65d2bbc7d34d2e47..5aa967e8f3592ebe871fde4cff2fad174c412d7e 100644 (file)
@@ -32,7 +32,6 @@
 
 #include "base/cast.hh"
 #include "base/stl_helpers.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/common/NetDest.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/CreditLink_d.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/GarnetLink_d.hh"
index a11bf0c2dcf16f5cb78f82f22f96a93dc8e5d248..d0a422f1f8a889237d2d4b5cda547505c6848ff8 100644 (file)
@@ -28,7 +28,6 @@
  * Authors: Niket Agarwal
  */
 
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/network/garnet/fixed-pipeline/OutVcState_d.hh"
 #include "mem/ruby/system/System.hh"
 
index 091a0077d81ac30d11bc2744d9ca44d52500c6ef..7a304be28b33504a97bfce9ec319b45b3666cd56 100644 (file)
@@ -32,7 +32,6 @@
 
 #include "base/cast.hh"
 #include "base/stl_helpers.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/common/NetDest.hh"
 #include "mem/ruby/network/BasicLink.hh"
 #include "mem/ruby/network/garnet/flexible-pipeline/GarnetLink.hh"
index 19b0fcd35b8a7cb6130d1f29a5a1ec1207e031b3..85bf9691ad5c6521ce13bdd101f36839addc18a7 100644 (file)
@@ -43,7 +43,6 @@
 #include <vector>
 
 #include "mem/ruby/common/Consumer.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/network/Network.hh"
 #include "mem/ruby/system/System.hh"
 
index 289b83a3ae63df3d593a74d50000c7d377f6ebe2..acd03a3fae718e3136ebbf690a4e0312e5781365 100644 (file)
@@ -34,7 +34,6 @@
 #include "mem/protocol/RubyAccessMode.hh"
 #include "mem/protocol/RubyRequestType.hh"
 #include "mem/ruby/common/Address.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/common/Set.hh"
 
 class Histogram;
index 070db6807c1e5a2b10a06ecb1c674b77ff7c2898..7decd497ac23f4e64fd11a2e385a799ce4c74ea9 100644 (file)
@@ -60,7 +60,8 @@
 using namespace std;
 using m5::stl_helpers::operator<<;
 
-Profiler::Profiler(const RubySystemParams *p)
+Profiler::Profiler(const RubySystemParams *p, RubySystem *rs)
+    : m_ruby_system(rs)
 {
     m_hot_lines = p->hot_lines;
     m_all_instructions = p->all_instructions;
@@ -253,8 +254,8 @@ Profiler::collateStats()
     uint32_t numVNets = Network::getNumberOfVirtualNetworks();
     for (uint32_t i = 0; i < MachineType_NUM; i++) {
         for (map<uint32_t, AbstractController*>::iterator it =
-                  g_abs_controls[i].begin();
-             it != g_abs_controls[i].end(); ++it) {
+                  m_ruby_system->m_abstract_controls[i].begin();
+             it != m_ruby_system->m_abstract_controls[i].end(); ++it) {
 
             AbstractController *ctr = (*it).second;
             delayHistogram.add(ctr->getDelayHist());
@@ -267,8 +268,8 @@ Profiler::collateStats()
 
     for (uint32_t i = 0; i < MachineType_NUM; i++) {
         for (map<uint32_t, AbstractController*>::iterator it =
-                g_abs_controls[i].begin();
-                it != g_abs_controls[i].end(); ++it) {
+                m_ruby_system->m_abstract_controls[i].begin();
+                it != m_ruby_system->m_abstract_controls[i].end(); ++it) {
 
             AbstractController *ctr = (*it).second;
             Sequencer *seq = ctr->getSequencer();
@@ -280,8 +281,8 @@ Profiler::collateStats()
 
     for (uint32_t i = 0; i < MachineType_NUM; i++) {
         for (map<uint32_t, AbstractController*>::iterator it =
-                g_abs_controls[i].begin();
-                it != g_abs_controls[i].end(); ++it) {
+                m_ruby_system->m_abstract_controls[i].begin();
+                it != m_ruby_system->m_abstract_controls[i].end(); ++it) {
 
             AbstractController *ctr = (*it).second;
             Sequencer *seq = ctr->getSequencer();
index 5b1c9fe1e8d2e9928c71f01635361ff28f372747..146beadd6a08b2c803799634bf6e75e5dccd4351 100644 (file)
@@ -56,7 +56,6 @@
 #include "mem/protocol/PrefetchBit.hh"
 #include "mem/protocol/RubyAccessMode.hh"
 #include "mem/protocol/RubyRequestType.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/common/MachineID.hh"
 #include "params/RubySystem.hh"
 
@@ -66,9 +65,11 @@ class AddressProfiler;
 class Profiler
 {
   public:
-    Profiler(const RubySystemParams *params);
+    Profiler(const RubySystemParams *params, RubySystem *rs);
     ~Profiler();
 
+    RubySystem *m_ruby_system;
+
     void wakeup();
     void regStats(const std::string &name);
     void collateStats();
index 6cd9bdf416219fc5951dd4a93950485a0629e846..9cf8673a2e76b993696f5240a7c7db83aede1b37 100644 (file)
 #include "base/random.hh"
 #include "debug/RubyMemory.hh"
 #include "mem/ruby/common/Address.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/profiler/Profiler.hh"
 #include "mem/ruby/slicc_interface/Message.hh"
 #include "mem/ruby/slicc_interface/RubySlicc_ComponentMapping.hh"
index d69e8f4351571d8d7fc91265e68e2ed1a0b8dca0..c7bebc4475fb25c9b1768283fa1d1ddb2b463552 100644 (file)
@@ -37,7 +37,6 @@
 #include "mem/abstract_mem.hh"
 #include "mem/protocol/MemoryMsg.hh"
 #include "mem/ruby/common/Address.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/profiler/MemCntrlProfiler.hh"
 #include "mem/ruby/structures/MemoryNode.hh"
 #include "mem/ruby/system/System.hh"
index 84c096b05cd000e2b2ab06b35b51c6464741d15b..d40ae2b79dd5286c52b78f8abc63635852889eea 100644 (file)
@@ -26,7 +26,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/structures/TimerTable.hh"
 #include "mem/ruby/system/System.hh"
 
index f64e24fddd4c419475516f60471b4e632aa27ca7..e2be52083b44b1d8aaa3a904a89e20bb92f30bcb 100644 (file)
@@ -36,7 +36,6 @@
 #include "debug/RubyStats.hh"
 #include "mem/protocol/PrefetchBit.hh"
 #include "mem/protocol/RubyAccessMode.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/profiler/Profiler.hh"
 #include "mem/ruby/slicc_interface/RubyRequest.hh"
 #include "mem/ruby/system/Sequencer.hh"
index 128d1600332fdb133fe2d2b4ec2d4958ccf27f7b..815b89ee536ca8d0a9781620b5cb3edaf00ac2d4 100644 (file)
@@ -68,12 +68,12 @@ RubySystem::RubySystem(const Params *p)
     m_memory_size_bits = p->memory_size_bits;
 
     // Resize to the size of different machine types
-    g_abs_controls.resize(MachineType_NUM);
+    m_abstract_controls.resize(MachineType_NUM);
 
     // Collate the statistics before they are printed.
     Stats::registerDumpCallback(new RubyStatsCallback(this));
     // Create the profiler
-    m_profiler = new Profiler(p);
+    m_profiler = new Profiler(p, this);
     m_phys_mem = p->phys_mem;
 }
 
@@ -89,7 +89,7 @@ RubySystem::registerAbstractController(AbstractController* cntrl)
     m_abs_cntrl_vec.push_back(cntrl);
 
     MachineID id = cntrl->getMachineID();
-    g_abs_controls[id.getType()][id.getNum()] = cntrl;
+    m_abstract_controls[id.getType()][id.getNum()] = cntrl;
 }
 
 RubySystem::~RubySystem()
index 57a1b7cfbd748ede179623ebddf1a2bc3738a5b0..fdb5fc88164cc9547aa57cd271924e207fdc9558 100644 (file)
@@ -45,6 +45,7 @@
 #include "sim/clocked_object.hh"
 
 class Network;
+class AbstractController;
 
 class RubySystem : public ClockedObject
 {
@@ -142,6 +143,7 @@ class RubySystem : public ClockedObject
   public:
     Profiler* m_profiler;
     CacheRecorder* m_cache_recorder;
+    std::vector<std::map<uint32_t, AbstractController *> > m_abstract_controls;
 };
 
 class RubyStatsCallback : public Callback
index 24b429b283aeda85dd3064d6501bfa6ee5cd5f39..437fc539cdb6542e25f1b9c58a62fbb236f5e7b6 100644 (file)
@@ -250,7 +250,6 @@ class $py_ident(RubyController):
 #include "mem/protocol/TransitionResult.hh"
 #include "mem/protocol/Types.hh"
 #include "mem/ruby/common/Consumer.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/slicc_interface/AbstractController.hh"
 #include "params/$c_ident.hh"
 ''')
@@ -438,7 +437,6 @@ void unset_tbe(${{self.TBEType.c_ident}}*& m_tbe_ptr);
 #include "mem/protocol/${ident}_Event.hh"
 #include "mem/protocol/${ident}_State.hh"
 #include "mem/protocol/Types.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/system/System.hh"
 ''')
         for include_path in includes:
@@ -771,9 +769,10 @@ $c_ident::collateStats()
     for (${ident}_Event event = ${ident}_Event_FIRST;
          event < ${ident}_Event_NUM; ++event) {
         for (unsigned int i = 0; i < m_num_controllers; ++i) {
+            RubySystem *rs = params()->ruby_system;
             std::map<uint32_t, AbstractController *>::iterator it =
-                                g_abs_controls[MachineType_${ident}].find(i);
-            assert(it != g_abs_controls[MachineType_${ident}].end());
+                     rs->m_abstract_controls[MachineType_${ident}].find(i);
+            assert(it != rs->m_abstract_controls[MachineType_${ident}].end());
             (*eventVec[event])[i] =
                 (($c_ident *)(*it).second)->getEventCount(event);
         }
@@ -786,9 +785,10 @@ $c_ident::collateStats()
              event < ${ident}_Event_NUM; ++event) {
 
             for (unsigned int i = 0; i < m_num_controllers; ++i) {
+                RubySystem *rs = params()->ruby_system;
                 std::map<uint32_t, AbstractController *>::iterator it =
-                                g_abs_controls[MachineType_${ident}].find(i);
-                assert(it != g_abs_controls[MachineType_${ident}].end());
+                         rs->m_abstract_controls[MachineType_${ident}].find(i);
+                assert(it != rs->m_abstract_controls[MachineType_${ident}].end());
                 (*transVec[state][event])[i] =
                     (($c_ident *)(*it).second)->getTransitionCount(state, event);
             }
@@ -1044,7 +1044,6 @@ $c_ident::functionalWriteBuffers(PacketPtr& pkt)
 
         code('''
 #include "mem/protocol/Types.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/system/System.hh"
 ''')
 
@@ -1120,7 +1119,6 @@ ${ident}_Controller::wakeup()
 #include "mem/protocol/${ident}_Event.hh"
 #include "mem/protocol/${ident}_State.hh"
 #include "mem/protocol/Types.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/system/System.hh"
 
 #define HASH_FUN(state, event)  ((int(state)*${ident}_Event_NUM)+int(event))
index eb1dead0f77ccb9143aecf658f30ec2f09f5a44a..73d6f9c699947e22fb5424db1ccd8253621e5dd7 100644 (file)
@@ -399,7 +399,6 @@ operator<<(std::ostream& out, const ${{self.c_ident}}& obj)
 #include <memory>
 
 #include "mem/protocol/${{self.c_ident}}.hh"
-#include "mem/ruby/common/Global.hh"
 #include "mem/ruby/system/System.hh"
 
 using namespace std;