mem: Track the MemObject owner in MasterPort and SlavePort.
authorGabe Black <gabeblack@google.com>
Thu, 7 Mar 2019 05:37:01 +0000 (21:37 -0800)
committerGabe Black <gabeblack@google.com>
Fri, 15 Mar 2019 18:37:02 +0000 (18:37 +0000)
These types are much more tied to MemObjects and the gem5 memory
protocol than the Port or BaseMasterPort and BaseSlavePort classes.

Change-Id: I36bc8c75b9c74d28ee8b65dbcbf742cd41135742
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17032
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/mem/port.cc
src/mem/port.hh

index 47f56e633e7101ae9b0941301ce880ee16e9e586..ab62ccf1d45735a4e23e3d655ec5ea55636c7e46 100644 (file)
@@ -51,8 +51,8 @@
 #include "base/trace.hh"
 #include "mem/mem_object.hh"
 
-Port::Port(const std::string &_name, MemObject& _owner, PortID _id)
-    : portName(_name), id(_id), owner(_owner)
+Port::Port(const std::string &_name, PortID _id)
+    : portName(_name), id(_id)
 {
 }
 
@@ -60,9 +60,8 @@ Port::~Port()
 {
 }
 
-BaseMasterPort::BaseMasterPort(const std::string& name, MemObject* owner,
-                               PortID _id)
-    : Port(name, *owner, _id), _baseSlavePort(NULL)
+BaseMasterPort::BaseMasterPort(const std::string &name, PortID _id)
+    : Port(name, _id), _baseSlavePort(NULL)
 {
 }
 
@@ -86,9 +85,8 @@ BaseMasterPort::isConnected() const
     return _baseSlavePort != NULL;
 }
 
-BaseSlavePort::BaseSlavePort(const std::string& name, MemObject* owner,
-                             PortID _id)
-    : Port(name, *owner, _id), _baseMasterPort(NULL)
+BaseSlavePort::BaseSlavePort(const std::string &name, PortID _id)
+    : Port(name, _id), _baseMasterPort(NULL)
 {
 }
 
@@ -115,8 +113,8 @@ BaseSlavePort::isConnected() const
 /**
  * Master port
  */
-MasterPort::MasterPort(const std::string& name, MemObject* owner, PortID _id)
-    : BaseMasterPort(name, owner, _id), _slavePort(NULL)
+MasterPort::MasterPort(const std::string& name, MemObject* _owner, PortID _id)
+    : BaseMasterPort(name, _id), _slavePort(NULL), owner(*_owner)
 {
 }
 
@@ -219,8 +217,8 @@ MasterPort::printAddr(Addr a)
 /**
  * Slave port
  */
-SlavePort::SlavePort(const std::string& name, MemObject* owner, PortID id)
-    : BaseSlavePort(name, owner, id), _masterPort(NULL)
+SlavePort::SlavePort(const std::string& name, MemObject* _owner, PortID id)
+    : BaseSlavePort(name, id), _masterPort(NULL), owner(*_owner)
 {
 }
 
index 39f6dead894a3f1f8331ebe9624d8c06795f4b99..2c30e31d12000ea9f8d63b57248fa3e0b1470dd1 100644 (file)
@@ -76,17 +76,13 @@ class Port
      */
     const PortID id;
 
-    /** A reference to the MemObject that owns this port. */
-    MemObject& owner;
-
     /**
      * Abstract base class for ports
      *
      * @param _name Port name including the owners name
-     * @param _owner The MemObject that is the structural owner of this port
      * @param _id A port identifier for vector ports
      */
-    Port(const std::string& _name, MemObject& _owner, PortID _id);
+    Port(const std::string& _name, PortID _id);
 
     /**
      * Virtual destructor due to inheritance.
@@ -119,8 +115,7 @@ class BaseMasterPort : public Port
 
     BaseSlavePort* _baseSlavePort;
 
-    BaseMasterPort(const std::string& name, MemObject* owner,
-                   PortID id = InvalidPortID);
+    BaseMasterPort(const std::string& name, PortID id=InvalidPortID);
     virtual ~BaseMasterPort();
 
   public:
@@ -143,8 +138,7 @@ class BaseSlavePort : public Port
 
     BaseMasterPort* _baseMasterPort;
 
-    BaseSlavePort(const std::string& name, MemObject* owner,
-                  PortID id = InvalidPortID);
+    BaseSlavePort(const std::string& name, PortID id=InvalidPortID);
     virtual ~BaseSlavePort();
 
   public:
@@ -173,10 +167,14 @@ class MasterPort : public BaseMasterPort
 
     SlavePort* _slavePort;
 
+  protected:
+
+    MemObject& owner;
+
   public:
 
-    MasterPort(const std::string& name, MemObject* owner,
-               PortID id = InvalidPortID);
+    MasterPort(const std::string& name, MemObject* _owner,
+               PortID id=InvalidPortID);
     virtual ~MasterPort();
 
     /**
@@ -350,10 +348,14 @@ class SlavePort : public BaseSlavePort
 
     MasterPort* _masterPort;
 
+  protected:
+
+    MemObject& owner;
+
   public:
 
-    SlavePort(const std::string& name, MemObject* owner,
-              PortID id = InvalidPortID);
+    SlavePort(const std::string& name, MemObject* _owner,
+              PortID id=InvalidPortID);
     virtual ~SlavePort();
 
     /**