Gabe Black has submitted this change and it was merged. (
https://gem5-review.googlesource.com/c/public/gem5/+/17590 )
Change subject: mem: Add sendAtomicBackdoor/recvAtomicBackdoor port methods.
......................................................................
mem: Add sendAtomicBackdoor/recvAtomicBackdoor port methods.
These both perform atomic accesses like their non-backdoor equivalents,
and also request a backdoor corresponding to the access.
The default implementation for recvAtomicBackdoor prints a warning
(once per port instance), calls recvAtomic to do the actual access,
and leaves the backdoor pointer as nullptr. That way if an object
doesn't know how to handle or transfer requests for a back door, it
automatically replies in a safe way that ignores the back door request.
Change-Id: Ia9fbbe9996eb4b71ea62214d203aa039a05f1618
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17590
Reviewed-by: Nikos Nikoleris <[email protected]>
Reviewed-by: Daniel Carvalho <[email protected]>
Maintainer: Gabe Black <[email protected]>
---
M src/mem/port.cc
M src/mem/port.hh
2 files changed, 39 insertions(+), 1 deletion(-)
Approvals:
Nikos Nikoleris: Looks good to me, approved
Daniel Carvalho: Looks good to me, approved
Gabe Black: Looks good to me, approved
diff --git a/src/mem/port.cc b/src/mem/port.cc
index 001576f..933e982 100644
--- a/src/mem/port.cc
+++ b/src/mem/port.cc
@@ -144,6 +144,13 @@
return _slavePort->recvAtomic(pkt);
}
+Tick
+MasterPort::sendAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor)
+{
+ assert(pkt->isRequest());
+ return _slavePort->recvAtomicBackdoor(pkt, backdoor);
+}
+
void
MasterPort::sendFunctional(PacketPtr pkt)
{
@@ -195,7 +202,8 @@
* Slave port
*/
SlavePort::SlavePort(const std::string& name, MemObject* _owner, PortID id)
- : BaseSlavePort(name, id), _masterPort(NULL), owner(*_owner)
+ : BaseSlavePort(name, id), _masterPort(NULL),
defaultBackdoorWarned(false),
+ owner(*_owner)
{
}
@@ -220,6 +228,16 @@
}
Tick
+SlavePort::recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor)
+{
+ if (!defaultBackdoorWarned) {
+ warn("Port %s doesn't support requesting a back door.", name());
+ defaultBackdoorWarned = true;
+ }
+ return recvAtomic(pkt);
+}
+
+Tick
SlavePort::sendAtomicSnoop(PacketPtr pkt)
{
assert(pkt->isRequest());
diff --git a/src/mem/port.hh b/src/mem/port.hh
index 2154da0..72a0271 100644
--- a/src/mem/port.hh
+++ b/src/mem/port.hh
@@ -51,6 +51,7 @@
#define __MEM_PORT_HH__
#include "base/addr_range.hh"
+#include "mem/backdoor.hh"
#include "mem/packet.hh"
#include "sim/port.hh"
@@ -153,6 +154,18 @@
Tick sendAtomic(PacketPtr pkt);
/**
+ * Send an atomic request packet like above, but also request a
backdoor
+ * to the data being accessed.
+ *
+ * @param pkt Packet to send.
+ * @param backdoor Can be set to a back door pointer by the target to
let
+ * caller have direct access to the requested data.
+ *
+ * @return Estimated latency of access.
+ */
+ Tick sendAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor);
+
+ /**
* Send a functional request packet, where the data is instantly
* updated everywhere in the memory system, without affecting the
* current state of any block or moving the block.
@@ -300,6 +313,7 @@
private:
MasterPort* _masterPort;
+ bool defaultBackdoorWarned;
protected:
@@ -416,6 +430,12 @@
virtual Tick recvAtomic(PacketPtr pkt) = 0;
/**
+ * Receive an atomic request packet from the master port, and
optionally
+ * provide a backdoor to the data being accessed.
+ */
+ virtual Tick recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr
&backdoor);
+
+ /**
* Receive a functional request packet from the master port.
*/
virtual void recvFunctional(PacketPtr pkt) = 0;
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17590
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ia9fbbe9996eb4b71ea62214d203aa039a05f1618
Gerrit-Change-Number: 17590
Gerrit-PatchSet: 6
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-Reviewer: Andreas Sandberg <[email protected]>
Gerrit-Reviewer: Anthony Gutierrez <[email protected]>
Gerrit-Reviewer: Daniel Carvalho <[email protected]>
Gerrit-Reviewer: Gabe Black <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-Reviewer: Nikos Nikoleris <[email protected]>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev