kvm, mem: Refactor some Event subclasses into lambdas
Change-Id: Ifafdcf4692d58a17f90e66ff8de8fa3e146c34bb
Signed-off-by: Sean Wilson <spwilson2@wisc.edu>
Reviewed-on: https://gem5-review.googlesource.com/3924
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
diff --git a/src/cpu/kvm/base.cc b/src/cpu/kvm/base.cc
index 23a4080..250c6a2 100644
--- a/src/cpu/kvm/base.cc
+++ b/src/cpu/kvm/base.cc
@@ -74,7 +74,8 @@
vcpuID(vm.allocVCPUID()), vcpuFD(-1), vcpuMMapSize(0),
_kvmRun(NULL), mmioRing(NULL),
pageSize(sysconf(_SC_PAGE_SIZE)),
- tickEvent(*this),
+ tickEvent([this]{ tick(); }, "BaseKvmCPU tick",
+ false, Event::CPU_Tick_Pri),
activeInstPeriod(0),
perfControlledByTimer(params->usePerfOverflow),
hostFactor(params->hostFactor),
diff --git a/src/cpu/kvm/base.hh b/src/cpu/kvm/base.hh
index 6f30c55..29872e7 100644
--- a/src/cpu/kvm/base.hh
+++ b/src/cpu/kvm/base.hh
@@ -630,20 +630,6 @@
pthread_t vcpuThread;
private:
- struct TickEvent : public Event
- {
- BaseKvmCPU &cpu;
-
- TickEvent(BaseKvmCPU &c)
- : Event(CPU_Tick_Pri), cpu(c) {}
-
- void process() { cpu.tick(); }
-
- const char *description() const {
- return "BaseKvmCPU tick";
- }
- };
-
/**
* Service MMIO requests in the mmioRing.
*
@@ -708,7 +694,7 @@
/** Cached page size of the host */
const long pageSize;
- TickEvent tickEvent;
+ EventFunctionWrapper tickEvent;
/**
* Setup an instruction break if there is one pending.
diff --git a/src/mem/external_slave.cc b/src/mem/external_slave.cc
index 990e356..ac93e66 100644
--- a/src/mem/external_slave.cc
+++ b/src/mem/external_slave.cc
@@ -52,17 +52,9 @@
class StubSlavePort : public ExternalSlave::Port
{
public:
- class ResponseEvent : public Event
- {
- public:
- StubSlavePort &owner;
+ void processResponseEvent();
- ResponseEvent(StubSlavePort &owner_) : owner(owner_) { }
-
- void process();
- };
-
- ResponseEvent responseEvent;
+ EventFunctionWrapper responseEvent;
/** Stub can handle a single request at a time. This will be
* NULL when no packet is in flight */
@@ -75,7 +67,8 @@
StubSlavePort(const std::string &name_,
ExternalSlave &owner_) :
ExternalSlave::Port(name_, owner_),
- responseEvent(*this), responsePacket(NULL), mustRetry(false)
+ responseEvent([this]{ processResponseEvent(); }, name()),
+ responsePacket(NULL), mustRetry(false)
{ }
Tick recvAtomic(PacketPtr packet);
@@ -123,18 +116,18 @@
}
void
-StubSlavePort::ResponseEvent::process()
+StubSlavePort::processResponseEvent()
{
- owner.responsePacket->makeResponse();
- owner.responsePacket->headerDelay = 0;
- owner.responsePacket->payloadDelay = 0;
+ responsePacket->makeResponse();
+ responsePacket->headerDelay = 0;
+ responsePacket->payloadDelay = 0;
- if (owner.sendTimingResp(owner.responsePacket)) {
- owner.responsePacket = NULL;
+ if (sendTimingResp(responsePacket)) {
+ responsePacket = NULL;
- if (owner.mustRetry)
- owner.sendRetryReq();
- owner.mustRetry = false;
+ if (mustRetry)
+ sendRetryReq();
+ mustRetry = false;
}
}