summaryrefslogtreecommitdiff
path: root/src/cpu/kvm/arm_cpu.hh
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas@sandberg.pp.se>2013-06-11 09:24:51 +0200
committerAndreas Sandberg <andreas@sandberg.pp.se>2013-06-11 09:24:51 +0200
commit4f002930bc03125b9b886233985993291f5a4730 (patch)
tree43d8eb037db7316629ed109add8386ac94d7a5b2 /src/cpu/kvm/arm_cpu.hh
parentdf059f45a0cbd230ad00f6da24cfc5d228430e16 (diff)
downloadgem5-4f002930bc03125b9b886233985993291f5a4730.tar.xz
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.
Diffstat (limited to 'src/cpu/kvm/arm_cpu.hh')
-rw-r--r--src/cpu/kvm/arm_cpu.hh2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/cpu/kvm/arm_cpu.hh b/src/cpu/kvm/arm_cpu.hh
index 786320cfd..9d9850fef 100644
--- a/src/cpu/kvm/arm_cpu.hh
+++ b/src/cpu/kvm/arm_cpu.hh
@@ -89,7 +89,7 @@ class ArmKvmCPU : public BaseKvmCPU
typedef std::vector<uint64_t> RegIndexVector;
- void tick();
+ Tick kvmRun(Tick ticks);
void updateKvmState();
void updateThreadContext();