[PATCH 3/3] arm64: kvm: Fix single step for guest skipped instructions
Alex Bennée
alex.bennee at linaro.org
Wed Oct 4 03:50:59 PDT 2017
Paolo Bonzini <pbonzini at redhat.com> writes:
> On 04/10/2017 12:08, Alex Bennée wrote:
>>
>> From 2e8fcea695a9eca67fbeb331d3104d1d9e7e337a Mon Sep 17 00:00:00 2001
>> From: =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee at linaro.org>
>> Date: Wed, 4 Oct 2017 09:49:41 +0000
>> Subject: [PATCH] kvm: exit run loop after emulating IO when single stepping
>> MIME-Version: 1.0
>> Content-Type: text/plain; charset=UTF-8
>> Content-Transfer-Encoding: 8bit
>>
>> If single-stepping is enabled we should exit the run-loop after
>> emulating the access. Otherwise single-stepping across emulated IO
>> accesses may skip an instruction.
>>
>> This only addresses user-space emulation. Stuff done in kernel-mode
>> should be handled there.
>>
>> Signed-off-by: Alex Bennée <alex.bennee at linaro.org>
>> ---
>> accel/kvm/kvm-all.c | 4 ++--
>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
>> index 90c88b517d..85bcb2b0d4 100644
>> --- a/accel/kvm/kvm-all.c
>> +++ b/accel/kvm/kvm-all.c
>> @@ -1940,7 +1940,7 @@ int kvm_cpu_exec(CPUState *cpu)
>> run->io.direction,
>> run->io.size,
>> run->io.count);
>> - ret = 0;
>> + ret = cpu->singlestep_enabled ? EXCP_DEBUG : 0;
>> break;
>> case KVM_EXIT_MMIO:
>> DPRINTF("handle_mmio\n");
>> @@ -1950,7 +1950,7 @@ int kvm_cpu_exec(CPUState *cpu)
>> run->mmio.data,
>> run->mmio.len,
>> run->mmio.is_write);
>> - ret = 0;
>> + ret = cpu->singlestep_enabled ? EXCP_DEBUG : 0;
>> break;
>> case KVM_EXIT_IRQ_WINDOW_OPEN:
>> DPRINTF("irq_window_open\n");
>
> Singlestep mode doesn't make much sense for KVM. For TCG the purpose is
> to build one-instruction translation blocks, but what would it mean for KVM?
It's used by the kvm_arch_handle_debug() code to verify single-stepping
is enabled when processing debug exceptions. And also kvm_update_debug:
if (cpu->singlestep_enabled) {
data.dbg.control |= KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP;
}
We also have an aliased singlestep_enabled in our disas_context for the
translator.
--
Alex Bennée
More information about the linux-arm-kernel
mailing list