ruby: Fix Topology throttle connections
authorJoel Hestness <jthestness@gmail.com>
Wed, 11 Sep 2013 20:35:18 +0000 (15:35 -0500)
committerJoel Hestness <jthestness@gmail.com>
Wed, 11 Sep 2013 20:35:18 +0000 (15:35 -0500)
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.

src/mem/ruby/network/Topology.cc

index bf270cce1a5d97f657c99e844556af3127939b77..4f71c62085d2071360edacaa45a532c7cf2dd49e 100644 (file)
@@ -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;