diff options
Diffstat (limited to 'arch/arm64/kvm/debug.c')
-rw-r--r-- | arch/arm64/kvm/debug.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/arm64/kvm/debug.c b/arch/arm64/kvm/debug.c index dbadfaf850a7..fa63b28c65e0 100644 --- a/arch/arm64/kvm/debug.c +++ b/arch/arm64/kvm/debug.c | |||
@@ -221,3 +221,24 @@ void kvm_arm_clear_debug(struct kvm_vcpu *vcpu) | |||
221 | } | 221 | } |
222 | } | 222 | } |
223 | } | 223 | } |
224 | |||
225 | |||
226 | /* | ||
227 | * After successfully emulating an instruction, we might want to | ||
228 | * return to user space with a KVM_EXIT_DEBUG. We can only do this | ||
229 | * once the emulation is complete, though, so for userspace emulations | ||
230 | * we have to wait until we have re-entered KVM before calling this | ||
231 | * helper. | ||
232 | * | ||
233 | * Return true (and set exit_reason) to return to userspace or false | ||
234 | * if no further action is required. | ||
235 | */ | ||
236 | bool kvm_arm_handle_step_debug(struct kvm_vcpu *vcpu, struct kvm_run *run) | ||
237 | { | ||
238 | if (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP) { | ||
239 | run->exit_reason = KVM_EXIT_DEBUG; | ||
240 | run->debug.arch.hsr = ESR_ELx_EC_SOFTSTP_LOW << ESR_ELx_EC_SHIFT; | ||
241 | return true; | ||
242 | } | ||
243 | return false; | ||
244 | } | ||