Hi all, Whilst trying to investigate some issues with MacOS under KVM PR I noticed that when setting software breakpoints the KVM VCPU would stop as requested, but QEMU's gdbstub would hang indefinitely. I eventually traced it down to this code in QEMU's target/ppc/kvm.c: static int kvm_handle_debug(PowerPCCPU *cpu, struct kvm_run *run) { CPUState *cs = CPU(cpu); CPUPPCState *env = &cpu->env; struct kvm_debug_exit_arch *arch_info = &run->debug.arch; if (cs->singlestep_enabled) { return kvm_handle_singlestep(); } if (arch_info->status) { return kvm_handle_hw_breakpoint(cs, arch_info); } if (kvm_find_sw_breakpoint(cs, arch_info->address)) { return kvm_handle_sw_breakpoint(); } The problem here is that with Book3S PR on my Mac hardware, run->debug.arch.status != 0 which causes QEMU to think that this is a hardware breakpoint and so the software breakpoint doesn't get handled correctly. For comparison both booke.c and e500_emulate.c set debug.arch.status = 0 for software breakpoints, whereas both book3s_hv.c and book3s_pr.c do not. Given that emulate.c contains shared code for handling software breakpoints, would the following simple patch suffice? diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c index 9f5b8c01c4e1..e77becaad5dd 100644 --- a/arch/powerpc/kvm/emulate.c +++ b/arch/powerpc/kvm/emulate.c @@ -282,6 +282,7 @@ int kvmppc_emulate_instruction(struct kvm_run *run, struct kvm_vcpu *vcpu) */ if (inst == KVMPPC_INST_SW_BREAKPOINT) { run->exit_reason = KVM_EXIT_DEBUG; + run->debug.arch.status = 0; run->debug.arch.address = kvmppc_get_pc(vcpu); emulated = EMULATE_EXIT_USER; advance = 0; ATB, Mark.