kvm: Don't handle IO and execute in the same tick
authorAndreas Sandberg <andreas@sandberg.pp.se>
Tue, 11 Jun 2013 07:24:51 +0000 (09:24 +0200)
committerAndreas Sandberg <andreas@sandberg.pp.se>
Tue, 11 Jun 2013 07:24:51 +0000 (09:24 +0200)
commit4f002930bc03125b9b886233985993291f5a4730
tree43d8eb037db7316629ed109add8386ac94d7a5b2
parentdf059f45a0cbd230ad00f6da24cfc5d228430e16
kvm: Don't handle IO and execute in the same tick

We currently execute instructions in the guest and then handle any IO
request right after we break out of the virtualized environment. This
has the effect of executing IO requests in the exact same tick as the
first instruction in the sequence that was just run. There seem to be
cases where this simplification upsets some timing-sensitive devices.

This changeset splits execute and IO (and other services) across
multiple ticks. This is implemented by adding a separate
RunningService state to the CPU state machine. When a VM requires
service, it enters into this state and pending IO is then serviced in
the future instead of immediately. The delay between getting the
request and servicing it depends on the number of cycles executed in
the guest, which allows other components to catch up with the CPU.
src/cpu/kvm/arm_cpu.cc
src/cpu/kvm/arm_cpu.hh
src/cpu/kvm/base.cc
src/cpu/kvm/base.hh