cpu: Get rid of the nextInstEventCount method.

This was only used by the KVM CPU, and it has access to all it needs to
figure out that value locally without requiring all the ThreadContexts
to implement an equivalent function.

Change-Id: I17a14ce669db2519edf129db761ebd8dc3bd4129
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/22114
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Gabe Black
2019-10-14 17:51:15 -07:00
parent 44831fabfb
commit ea267682e6
6 changed files with 6 additions and 23 deletions

View File

@@ -96,7 +96,6 @@ class ThreadContext : public ::ThreadContext
bool schedule(PCEvent *e) override { return false; }
bool remove(PCEvent *e) override { return false; }
Tick nextInstEventCount() override { return MaxTick; }
void scheduleInstCountEvent(Event *event, Tick count) override {}
void descheduleInstCountEvent(Event *event) override {}
Tick getCurrentInstCount() override;

View File

@@ -92,11 +92,6 @@ class CheckerThreadContext : public ThreadContext
bool schedule(PCEvent *e) override { return actualTC->schedule(e); }
bool remove(PCEvent *e) override { return actualTC->remove(e); }
Tick
nextInstEventCount() override
{
return actualTC->nextInstEventCount();
}
void
scheduleInstCountEvent(Event *event, Tick count) override
{

View File

@@ -630,7 +630,9 @@ BaseKvmCPU::tick()
case RunningServiceCompletion:
case Running: {
const uint64_t nextInstEvent(tc->nextInstEventCount());
auto &queue = thread->comInstEventQueue;
const uint64_t nextInstEvent(
queue.empty() ? MaxTick : queue.nextTick());
// Enter into KVM and complete pending IO instructions if we
// have an instruction event pending.
const Tick ticksToExecute(
@@ -686,7 +688,7 @@ BaseKvmCPU::tick()
// Service any pending instruction events. The vCPU should
// have exited in time for the event using the instruction
// counter configured by setupInstStop().
thread->comInstEventQueue.serviceEvents(ctrInsts);
queue.serviceEvents(ctrInsts);
if (tryDrain())
_status = Idle;
@@ -1346,10 +1348,10 @@ BaseKvmCPU::ioctlRun()
void
BaseKvmCPU::setupInstStop()
{
Tick next = tc->nextInstEventCount();
if (next == MaxTick) {
if (thread->comInstEventQueue.empty()) {
setupInstCounter(0);
} else {
Tick next = thread->comInstEventQueue.nextTick();
assert(next > ctrInsts);
setupInstCounter(next - ctrInsts);
}

View File

@@ -86,12 +86,6 @@ class O3ThreadContext : public ThreadContext
return thread->pcEventQueue.remove(e);
}
Tick
nextInstEventCount() override
{
return thread->comInstEventQueue.empty() ?
MaxTick : thread->comInstEventQueue.nextTick();
}
void
scheduleInstCountEvent(Event *event, Tick count) override
{

View File

@@ -198,12 +198,6 @@ class SimpleThread : public ThreadState, public ThreadContext
bool schedule(PCEvent *e) override { return pcEventQueue.schedule(e); }
bool remove(PCEvent *e) override { return pcEventQueue.remove(e); }
Tick
nextInstEventCount() override
{
return comInstEventQueue.empty() ?
MaxTick : comInstEventQueue.nextTick();
}
void
scheduleInstCountEvent(Event *event, Tick count) override
{

View File

@@ -192,7 +192,6 @@ class ThreadContext : public PCEventScope
virtual EndQuiesceEvent *getQuiesceEvent() = 0;
virtual Tick nextInstEventCount() = 0;
virtual void scheduleInstCountEvent(Event *event, Tick count) = 0;
virtual void descheduleInstCountEvent(Event *event) = 0;
virtual Tick getCurrentInstCount() = 0;