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>
This commit is contained in:
Sean Wilson
2017-06-27 16:22:24 -05:00
parent 8c1ea47b3c
commit e5c9e9c4d4
3 changed files with 16 additions and 36 deletions

View File

@@ -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),

View File

@@ -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.

View File

@@ -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 @@ 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;
}
}