diff options
-rw-r--r-- | src/cpu/kvm/base.cc | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/cpu/kvm/base.cc b/src/cpu/kvm/base.cc index abb3451f6..827cd5581 100644 --- a/src/cpu/kvm/base.cc +++ b/src/cpu/kvm/base.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012 ARM Limited + * Copyright (c) 2012, 2015 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -533,15 +533,23 @@ BaseKvmCPU::tick() case RunningServiceCompletion: case Running: { - EventQueue *q = curEventQueue(); - Tick ticksToExecute(q->nextTick() - curTick()); + const uint64_t nextInstEvent( + !comInstEventQueue[0]->empty() ? + comInstEventQueue[0]->nextTick() : UINT64_MAX); + // Enter into KVM and complete pending IO instructions if we + // have an instruction event pending. + const Tick ticksToExecute( + nextInstEvent > ctrInsts ? + curEventQueue()->nextTick() - curTick() : 0); // We might need to update the KVM state. syncKvmState(); // Setup any pending instruction count breakpoints using - // PerfEvent. - setupInstStop(); + // PerfEvent if we are going to execute more than just an IO + // completion. + if (ticksToExecute > 0) + setupInstStop(); DPRINTF(KvmRun, "Entering KVM...\n"); if (drainManager) { |