From e5c9e9c4d439e1937db33a954ac231032dab69f2 Mon Sep 17 00:00:00 2001 From: Sean Wilson Date: Tue, 27 Jun 2017 16:22:24 -0500 Subject: [PATCH] kvm, mem: Refactor some Event subclasses into lambdas Change-Id: Ifafdcf4692d58a17f90e66ff8de8fa3e146c34bb Signed-off-by: Sean Wilson Reviewed-on: https://gem5-review.googlesource.com/3924 Reviewed-by: Jason Lowe-Power Reviewed-by: Andreas Sandberg Maintainer: Andreas Sandberg --- src/cpu/kvm/base.cc | 3 ++- src/cpu/kvm/base.hh | 16 +--------------- src/mem/external_slave.cc | 33 +++++++++++++-------------------- 3 files changed, 16 insertions(+), 36 deletions(-) diff --git a/src/cpu/kvm/base.cc b/src/cpu/kvm/base.cc index 23a408084..250c6a270 100644 --- a/src/cpu/kvm/base.cc +++ b/src/cpu/kvm/base.cc @@ -74,7 +74,8 @@ BaseKvmCPU::BaseKvmCPU(BaseKvmCPUParams *params) 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 6f30c55e4..29872e744 100644 --- a/src/cpu/kvm/base.hh +++ b/src/cpu/kvm/base.hh @@ -630,20 +630,6 @@ class BaseKvmCPU : public BaseCPU 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 @@ class BaseKvmCPU : public BaseCPU /** 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 990e3561a..ac93e669c 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; - - ResponseEvent(StubSlavePort &owner_) : owner(owner_) { } - - void process(); - }; + void processResponseEvent(); - 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 @@ class StubSlavePort : public ExternalSlave::Port 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 @@ StubSlavePort::recvFunctional(PacketPtr packet) } 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; } } -- 2.30.2