1/* |
2 * Copyright (c) 2012, 2015 ARM Limited |
3 * All rights reserved 4 * 5 * The license below extends only to copyright in the software and shall 6 * not be construed as granting a license to any other intellectual 7 * property including but not limited to intellectual property relating 8 * to a hardware implementation of the functionality of the software 9 * licensed hereunder. You may use the software subject to the license 10 * terms below provided that you ensure that this notice is replicated --- 517 unchanged lines hidden (view full) --- 528 delay = handleKvmExit(); 529 530 if (tryDrain()) 531 _status = Idle; 532 break; 533 534 case RunningServiceCompletion: 535 case Running: { |
536 const uint64_t nextInstEvent( 537 !comInstEventQueue[0]->empty() ? 538 comInstEventQueue[0]->nextTick() : UINT64_MAX); 539 // Enter into KVM and complete pending IO instructions if we 540 // have an instruction event pending. 541 const Tick ticksToExecute( 542 nextInstEvent > ctrInsts ? 543 curEventQueue()->nextTick() - curTick() : 0); |
544 545 // We might need to update the KVM state. 546 syncKvmState(); 547 548 // Setup any pending instruction count breakpoints using |
549 // PerfEvent if we are going to execute more than just an IO 550 // completion. 551 if (ticksToExecute > 0) 552 setupInstStop(); |
553 554 DPRINTF(KvmRun, "Entering KVM...\n"); 555 if (drainManager) { 556 // Force an immediate exit from KVM after completing 557 // pending operations. The architecture-specific code 558 // takes care to run until it is in a state where it can 559 // safely be drained. 560 delay = kvmRunDrain(); --- 721 unchanged lines hidden --- |