python: Change || to && for MessageBuffers in connectPorts.
authorGabe Black <gabeblack@google.com>
Thu, 7 Mar 2019 04:43:59 +0000 (20:43 -0800)
committerGabe Black <gabeblack@google.com>
Mon, 18 Mar 2019 23:25:38 +0000 (23:25 +0000)
The connectPorts function currently checks if *either* of the peers in
a port connection are a MessageBuffer, and if so will ignore the
connection. This CL changes that || into a && so that *both* of the
peers need to be a Ruby types (either a MessageBuffer or Network) for
the connection to be ignored. That makes it easier to contain that
abnormal behavior to those types instead of having it apply even when
other types of port owners are involved.

Unfortunately the number of interesting Ruby types is unbounded, but
these are the types with ports as of today. This mechanism will
hopefully be replacedall together so this should be a temporary issue.

Change-Id: I140498770e5d37eb2abd3d99261d47e111f1c8ab
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17031
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>

src/python/pybind11/pyobject.cc

index a2da96d3b3f2408b7a9a81f6bf61a3fba15ecfda..bd363a1327a80183d9e5c2761a7557ad5734b26a 100644 (file)
@@ -50,7 +50,9 @@
 #include "dev/net/etherint.hh"
 #include "dev/net/etherobject.hh"
 #include "mem/mem_object.hh"
+#include "mem/ruby/network/Network.hh"
 #include "mem/ruby/slicc_interface/AbstractController.hh"
+#include "mem/ruby/system/Sequencer.hh"
 #include "sim/full_system.hh"
 
 namespace py = pybind11;
@@ -84,8 +86,11 @@ connectPorts(SimObject *o1, const std::string &name1, int i1,
     MessageBuffer *mb1, *mb2;
     mb1 = dynamic_cast<MessageBuffer*>(o1);
     mb2 = dynamic_cast<MessageBuffer*>(o2);
+    Network *nw1, *nw2;
+    nw1 = dynamic_cast<Network*>(o1);
+    nw2 = dynamic_cast<Network*>(o2);
 
-    if (mb1 || mb2) {
+    if ((mb1 || nw1) && (mb2 || nw2)) {
         // No need to connect anything here currently. MessageBuffer
         // connections in Python only serve to print the connections in
         // the config output.