]> git.proxmox.com Git - mirror_qemu.git/commit - cpus.c
icount: Fix virtual clock start value on ARM
authorSebastian Tanase <sebastian.tanase@openwide.fr>
Wed, 23 Jul 2014 09:47:50 +0000 (11:47 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 6 Aug 2014 15:53:07 +0000 (17:53 +0200)
commit714683950547ea8173aefe25f574874c06233455
tree1edd8cf0b6f4571c7a436396b82566ae89817a7a
parent3f03131390a8c91a0cac530f7ae79b04b42ab928
icount: Fix virtual clock start value on ARM

When using the icount option on ARM, the virtual
clock starts counting at realtime clock but it
should start at 0.

The reason why the virtual clock starts at realtime clock
is because the first time we call qemu_clock_warp (which
calls icount_warp_rt) in tcg_exec_all, qemu_icount_bias
(which is part of the virtual time computation mechanism)
will increment by realtime - vm_clock_warp_start, with
vm_clock_warp_start being 0 (see icount_warp_rt in cpus.c).

By changing the value of vm_clock_warp_start from 0 to -1,
the first time we call qemu_clock_warp which calls
icount_warp_rt, we will return immediatly because
icount_warp_rt first checks if vm_clock_warp_start is -1
and if it's the case it returns. Therefore, qemu_icount_bias
will first be incremented by the value of a virtual timer
deadline when the virtual cpu goes from active to inactive.

The virtual time will start at 0 and increment based
on the instruction counter when the vcpu is active or
the qemu_icount_bias value when inactive.

Signed-off-by: Sebastian Tanase <sebastian.tanase@openwide.fr>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
cpus.c