diff --git a/src/arch/arm/fastmodel/iris/thread_context.hh b/src/arch/arm/fastmodel/iris/thread_context.hh
index ef52143..acb325c 100644
--- a/src/arch/arm/fastmodel/iris/thread_context.hh
+++ b/src/arch/arm/fastmodel/iris/thread_context.hh
@@ -96,7 +96,6 @@
     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;
diff --git a/src/cpu/checker/thread_context.hh b/src/cpu/checker/thread_context.hh
index d32e0fa..347c4ba 100644
--- a/src/cpu/checker/thread_context.hh
+++ b/src/cpu/checker/thread_context.hh
@@ -92,11 +92,6 @@
     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
     {
diff --git a/src/cpu/kvm/base.cc b/src/cpu/kvm/base.cc
index 2522eee..83cb04f 100644
--- a/src/cpu/kvm/base.cc
+++ b/src/cpu/kvm/base.cc
@@ -630,7 +630,9 @@
 
       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 @@
           // 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 @@
 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);
     }
diff --git a/src/cpu/o3/thread_context.hh b/src/cpu/o3/thread_context.hh
index 6549642..c68f34c 100644
--- a/src/cpu/o3/thread_context.hh
+++ b/src/cpu/o3/thread_context.hh
@@ -86,12 +86,6 @@
         return thread->pcEventQueue.remove(e);
     }
 
-    Tick
-    nextInstEventCount() override
-    {
-        return thread->comInstEventQueue.empty() ?
-            MaxTick : thread->comInstEventQueue.nextTick();
-    }
     void
     scheduleInstCountEvent(Event *event, Tick count) override
     {
diff --git a/src/cpu/simple_thread.hh b/src/cpu/simple_thread.hh
index 367ecea..3a7c85a 100644
--- a/src/cpu/simple_thread.hh
+++ b/src/cpu/simple_thread.hh
@@ -198,12 +198,6 @@
     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
     {
diff --git a/src/cpu/thread_context.hh b/src/cpu/thread_context.hh
index 2e1b572..a77ac48 100644
--- a/src/cpu/thread_context.hh
+++ b/src/cpu/thread_context.hh
@@ -192,7 +192,6 @@
 
     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;
