diff options
author | Sean Wilson <spwilson2@wisc.edu> | 2017-06-27 16:22:24 -0500 |
---|---|---|
committer | Sean Wilson <spwilson2@wisc.edu> | 2017-07-12 20:07:05 +0000 |
commit | e5c9e9c4d439e1937db33a954ac231032dab69f2 (patch) | |
tree | 9337b4df1004b0fb9b4ccd6aee0561b83261a23c | |
parent | 8c1ea47b3c2fc90378eb16f3ad92d4ae522567c5 (diff) | |
download | gem5-e5c9e9c4d439e1937db33a954ac231032dab69f2.tar.xz |
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>
-rw-r--r-- | src/cpu/kvm/base.cc | 3 | ||||
-rw-r--r-- | src/cpu/kvm/base.hh | 16 | ||||
-rw-r--r-- | 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; } } |