summaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorTuan Ta <qtt2@cornell.edu>2018-01-22 12:54:14 -0500
committerTuan Ta <qtt2@cornell.edu>2018-06-14 22:41:11 +0000
commit7bab1d0aff897bc23b5677a51ae67b8cc32953dc (patch)
treeb306210feabe295f3aeaad2c1ac4d7c4679b117c /src/base
parent74a8947fcb37ec4b3d43cf96740c474f0e3ffed8 (diff)
downloadgem5-7bab1d0aff897bc23b5677a51ae67b8cc32953dc.tar.xz
base,mem: Support AtomicOpFunctor in the classic memory system
AtomicOpFunctor can be used to implement atomic memory operations. AtomicOpFunctor is captured inside a memory request and executed directly in the memory hierarchy in a single step. This patch enables AtomicOpFunctor pointers to be included in a memory request and executed in a single step in the classic cache system. This patch also makes the copy constructor of Request class do a deep copy of AtomicOpFunctor object. This prevents a copy of a Request object from accessing a deleted AtomicOpFunctor object. Change-Id: I6649532b37f711e55f4552ad26893efeb300dd37 Reviewed-on: https://gem5-review.googlesource.com/8185 Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Diffstat (limited to 'src/base')
-rw-r--r--src/base/types.hh2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/base/types.hh b/src/base/types.hh
index 05a29f8bd..d07c370ab 100644
--- a/src/base/types.hh
+++ b/src/base/types.hh
@@ -191,6 +191,7 @@ constexpr decltype(nullptr) NoFault = nullptr;
struct AtomicOpFunctor
{
virtual void operator()(uint8_t *p) = 0;
+ virtual AtomicOpFunctor* clone() = 0;
virtual ~AtomicOpFunctor() {}
};
@@ -198,6 +199,7 @@ template <class T>
struct TypedAtomicOpFunctor : public AtomicOpFunctor
{
void operator()(uint8_t *p) { execute((T *)p); }
+ virtual AtomicOpFunctor* clone() = 0;
virtual void execute(T * p) = 0;
};