summaryrefslogtreecommitdiff
path: root/src/mem/ruby/network/Topology.cc
diff options
context:
space:
mode:
authorJoel Hestness <jthestness@gmail.com>2013-09-11 15:35:18 -0500
committerJoel Hestness <jthestness@gmail.com>2013-09-11 15:35:18 -0500
commitcc155ffa0d6b199b71bc598c7f267a4b7da07ac3 (patch)
treee98b2f1ef9b123034f3285d2830a9891a3a67f39 /src/mem/ruby/network/Topology.cc
parenta1f9081babaf67b5e98d6ad35a6b1f6130e12fd7 (diff)
downloadgem5-cc155ffa0d6b199b71bc598c7f267a4b7da07ac3.tar.xz
ruby: Fix Topology throttle connections
The Topology source sets up input and output buffers for each of the external nodes of a topology by indexing on Ruby's generated controller unique IDs. These unique IDs are found by adding the MachineType_base_number to the version number of each controller (see any generated *_Controller.cc - init() calls getToNetQueue and getFromNetQueue using m_version + base). However, the Topology object used the cntrl_id - which is required to be unique across all controllers - to index the controllers list as they are being connected to their input and output buffers. If the cntrl_ids did not match the Ruby unique ID, the throttles end up connected to incorrectly indexed nodes in the network, resulting in packets traversing incorrect network paths. This patch fixes the Topology indexing scheme by using the Ruby unique ID to match that of the SimpleNetwork buffer vectors.
Diffstat (limited to 'src/mem/ruby/network/Topology.cc')
-rw-r--r--src/mem/ruby/network/Topology.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/mem/ruby/network/Topology.cc b/src/mem/ruby/network/Topology.cc
index bf270cce1..4f71c6208 100644
--- a/src/mem/ruby/network/Topology.cc
+++ b/src/mem/ruby/network/Topology.cc
@@ -89,7 +89,9 @@ Topology::Topology(uint32_t num_routers, vector<BasicExtLink *> ext_links,
// Store the ExtLink pointers for later
m_ext_link_vector.push_back(ext_link);
- int ext_idx1 = abs_cntrl->params()->cntrl_id;
+ int machine_base_idx = MachineType_base_number(
+ string_to_MachineType(abs_cntrl->getName()));
+ int ext_idx1 = machine_base_idx + abs_cntrl->getVersion();
int ext_idx2 = ext_idx1 + m_nodes;
int int_idx = router->params()->router_id + 2*m_nodes;