summaryrefslogtreecommitdiffstats
path: root/virt
diff options
context:
space:
mode:
authorAlex Bennée <alex.bennee@linaro.org>2017-11-16 16:39:21 +0100
committerChristoffer Dall <christoffer.dall@linaro.org>2017-11-29 16:46:21 +0100
commit1eb591288b956bdd75e464e69b6b8207ffa6e5e3 (patch)
tree6fc4a50011b82e23488977cef1eb0d91e15aff1f /virt
parentkvm: arm64: handle single-stepping trapped instructions (diff)
downloadlinux-1eb591288b956bdd75e464e69b6b8207ffa6e5e3.tar.xz
linux-1eb591288b956bdd75e464e69b6b8207ffa6e5e3.zip
kvm: arm64: handle single-step of userspace mmio instructions
The system state of KVM when using userspace emulation is not complete until we return into KVM_RUN. To handle mmio related updates we wait until they have been committed and then schedule our KVM_EXIT_DEBUG. The kvm_arm_handle_step_debug() helper tells us if we need to return and sets up the exit_reason for us. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Diffstat (limited to 'virt')
-rw-r--r--virt/kvm/arm/arm.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c
index a6524ff27de4..322c570d211e 100644
--- a/virt/kvm/arm/arm.c
+++ b/virt/kvm/arm/arm.c
@@ -628,6 +628,9 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
ret = kvm_handle_mmio_return(vcpu, vcpu->run);
if (ret)
return ret;
+ if (kvm_arm_handle_step_debug(vcpu, vcpu->run))
+ return 0;
+
}
if (run->immediate_exit)