Message ID | 20200110151344.278471-2-farosas@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | target/ppc: single step for KVM HV | expand |
On Fri, Jan 10, 2020 at 12:13:42PM -0300, Fabiano Rosas wrote: > The kvm_handle_debug function can return 0 to go back into the guest > or return 1 to notify the gdbstub thread and pass control to GDB. > > Signed-off-by: Fabiano Rosas <farosas@linux.ibm.com> Good change regardless of the rest of the series. Applied to ppc-for-5.0. > --- > target/ppc/kvm.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c > index d1c334f0e3..0bd4a8d399 100644 > --- a/target/ppc/kvm.c > +++ b/target/ppc/kvm.c > @@ -53,6 +53,9 @@ > > #define PROC_DEVTREE_CPU "/proc/device-tree/cpus/" > > +#define DEBUG_RETURN_GUEST 0 > +#define DEBUG_RETURN_GDB 1 > + > const KVMCapabilityInfo kvm_arch_required_capabilities[] = { > KVM_CAP_LAST_INFO > }; > @@ -1570,7 +1573,7 @@ void kvm_arch_update_guest_debug(CPUState *cs, struct kvm_guest_debug *dbg) > static int kvm_handle_hw_breakpoint(CPUState *cs, > struct kvm_debug_exit_arch *arch_info) > { > - int handle = 0; > + int handle = DEBUG_RETURN_GUEST; > int n; > int flag = 0; > > @@ -1578,13 +1581,13 @@ static int kvm_handle_hw_breakpoint(CPUState *cs, > if (arch_info->status & KVMPPC_DEBUG_BREAKPOINT) { > n = find_hw_breakpoint(arch_info->address, GDB_BREAKPOINT_HW); > if (n >= 0) { > - handle = 1; > + handle = DEBUG_RETURN_GDB; > } > } else if (arch_info->status & (KVMPPC_DEBUG_WATCH_READ | > KVMPPC_DEBUG_WATCH_WRITE)) { > n = find_hw_watchpoint(arch_info->address, &flag); > if (n >= 0) { > - handle = 1; > + handle = DEBUG_RETURN_GDB; > cs->watchpoint_hit = &hw_watchpoint; > hw_watchpoint.vaddr = hw_debug_points[n].addr; > hw_watchpoint.flags = flag; > @@ -1596,12 +1599,12 @@ static int kvm_handle_hw_breakpoint(CPUState *cs, > > static int kvm_handle_singlestep(void) > { > - return 1; > + return DEBUG_RETURN_GDB; > } > > static int kvm_handle_sw_breakpoint(void) > { > - return 1; > + return DEBUG_RETURN_GDB; > } > > static int kvm_handle_debug(PowerPCCPU *cpu, struct kvm_run *run) > @@ -1653,7 +1656,7 @@ static int kvm_handle_debug(PowerPCCPU *cpu, struct kvm_run *run) > env->error_code = POWERPC_EXCP_INVAL; > ppc_cpu_do_interrupt(cs); > > - return 0; > + return DEBUG_RETURN_GUEST; > } > > int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run)
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c index d1c334f0e3..0bd4a8d399 100644 --- a/target/ppc/kvm.c +++ b/target/ppc/kvm.c @@ -53,6 +53,9 @@ #define PROC_DEVTREE_CPU "/proc/device-tree/cpus/" +#define DEBUG_RETURN_GUEST 0 +#define DEBUG_RETURN_GDB 1 + const KVMCapabilityInfo kvm_arch_required_capabilities[] = { KVM_CAP_LAST_INFO }; @@ -1570,7 +1573,7 @@ void kvm_arch_update_guest_debug(CPUState *cs, struct kvm_guest_debug *dbg) static int kvm_handle_hw_breakpoint(CPUState *cs, struct kvm_debug_exit_arch *arch_info) { - int handle = 0; + int handle = DEBUG_RETURN_GUEST; int n; int flag = 0; @@ -1578,13 +1581,13 @@ static int kvm_handle_hw_breakpoint(CPUState *cs, if (arch_info->status & KVMPPC_DEBUG_BREAKPOINT) { n = find_hw_breakpoint(arch_info->address, GDB_BREAKPOINT_HW); if (n >= 0) { - handle = 1; + handle = DEBUG_RETURN_GDB; } } else if (arch_info->status & (KVMPPC_DEBUG_WATCH_READ | KVMPPC_DEBUG_WATCH_WRITE)) { n = find_hw_watchpoint(arch_info->address, &flag); if (n >= 0) { - handle = 1; + handle = DEBUG_RETURN_GDB; cs->watchpoint_hit = &hw_watchpoint; hw_watchpoint.vaddr = hw_debug_points[n].addr; hw_watchpoint.flags = flag; @@ -1596,12 +1599,12 @@ static int kvm_handle_hw_breakpoint(CPUState *cs, static int kvm_handle_singlestep(void) { - return 1; + return DEBUG_RETURN_GDB; } static int kvm_handle_sw_breakpoint(void) { - return 1; + return DEBUG_RETURN_GDB; } static int kvm_handle_debug(PowerPCCPU *cpu, struct kvm_run *run) @@ -1653,7 +1656,7 @@ static int kvm_handle_debug(PowerPCCPU *cpu, struct kvm_run *run) env->error_code = POWERPC_EXCP_INVAL; ppc_cpu_do_interrupt(cs); - return 0; + return DEBUG_RETURN_GUEST; } int kvm_arch_handle_exit(CPUState *cs, struct kvm_run *run)
The kvm_handle_debug function can return 0 to go back into the guest or return 1 to notify the gdbstub thread and pass control to GDB. Signed-off-by: Fabiano Rosas <farosas@linux.ibm.com> --- target/ppc/kvm.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)