diff -r 160272d942df -r 199987006c04 src/cpu/kvm/BaseKvmCPU.py --- a/src/cpu/kvm/BaseKvmCPU.py Mon Jun 03 12:44:32 2013 +0200 +++ b/src/cpu/kvm/BaseKvmCPU.py Mon Jun 03 12:44:49 2013 +0200 @@ -71,4 +71,6 @@ kvmVM = Param.KvmVM(Parent.any, 'KVM VM (i.e., shared memory domain)') useCoalescedMMIO = Param.Bool(False, "Use coalesced MMIO (EXPERIMENTAL)") usePerfOverflow = Param.Bool(False, "Use perf event overflow counters (EXPERIMENTAL)") + + hostFreq = Param.Clock("2GHz", "Host clock frequency") hostFactor = Param.Float(1.0, "Cycle scale factor") diff -r 160272d942df -r 199987006c04 src/cpu/kvm/base.hh --- a/src/cpu/kvm/base.hh Mon Jun 03 12:44:32 2013 +0200 +++ b/src/cpu/kvm/base.hh Mon Jun 03 12:44:49 2013 +0200 @@ -670,6 +670,10 @@ */ std::unique_ptr runTimer; + /** Host frequency */ + Tick hostFreq; + + /** Host factor as specified in the configuration */ float hostFactor; /** diff -r 160272d942df -r 199987006c04 src/cpu/kvm/base.cc --- a/src/cpu/kvm/base.cc Mon Jun 03 12:44:32 2013 +0200 +++ b/src/cpu/kvm/base.cc Mon Jun 03 12:44:49 2013 +0200 @@ -83,6 +83,7 @@ pageSize(sysconf(_SC_PAGE_SIZE)), tickEvent(*this), perfControlledByTimer(params->usePerfOverflow), + hostFreq(params->hostFreq), hostFactor(params->hostFactor), drainManager(NULL), ctrInsts(0) @@ -103,11 +104,11 @@ runTimer.reset(new PerfKvmTimer(hwCycles, KVM_TIMER_SIGNAL, params->hostFactor, - params->clock)); + params->hostFreq)); else runTimer.reset(new PosixKvmTimer(KVM_TIMER_SIGNAL, CLOCK_MONOTONIC, params->hostFactor, - params->clock)); + params->hostFreq)); } BaseKvmCPU::~BaseKvmCPU() @@ -410,8 +411,7 @@ assert(_status == Idle); assert(!tickEvent.scheduled()); - numCycles += ticksToCycles(thread->lastActivate - thread->lastSuspend) - * hostFactor; + numCycles += ticksToCycles(thread->lastActivate - thread->lastSuspend); schedule(tickEvent, clockEdge(delay)); _status = Running;