On 08/21/2012 08:52 AM, Bharat Bhushan wrote: > This patch adds the debug stub support on booke/bookehv. > Now QEMU debug stub can use hw breakpoint, watchpoint and > software breakpoint to debug guest. > > Signed-off-by: Bharat Bhushan <bharat.bhus...@freescale.com> > --- > arch/powerpc/include/asm/kvm.h | 29 ++++++- > arch/powerpc/include/asm/kvm_host.h | 5 + > arch/powerpc/kernel/asm-offsets.c | 26 ++++++ > arch/powerpc/kvm/booke.c | 144 > +++++++++++++++++++++++++++++---- > arch/powerpc/kvm/booke_interrupts.S | 110 +++++++++++++++++++++++++ > arch/powerpc/kvm/bookehv_interrupts.S | 141 +++++++++++++++++++++++++++++++- > arch/powerpc/kvm/e500mc.c | 3 +- > 7 files changed, 435 insertions(+), 23 deletions(-) > > diff --git a/arch/powerpc/include/asm/kvm.h b/arch/powerpc/include/asm/kvm.h > index 61b197e..53479ea 100644 > --- a/arch/powerpc/include/asm/kvm.h > +++ b/arch/powerpc/include/asm/kvm.h > @@ -25,6 +25,7 @@ > /* Select powerpc specific features in <linux/kvm.h> */ > #define __KVM_HAVE_SPAPR_TCE > #define __KVM_HAVE_PPC_SMT > +#define __KVM_HAVE_GUEST_DEBUG > > struct kvm_regs { > __u64 pc; > @@ -264,7 +265,31 @@ struct kvm_fpu { > __u64 fpr[32]; > }; > > + > +/* > + * Defines for h/w breakpoint, watchpoint (read, write or both) and > + * software breakpoint. > + * These are used as "type" in KVM_SET_GUEST_DEBUG ioctl and "status" > + * for KVM_DEBUG_EXIT. > + */ > +#define KVMPPC_DEBUG_NONE 0x0 > +#define KVMPPC_DEBUG_BREAKPOINT (1UL << 1) > +#define KVMPPC_DEBUG_WATCH_WRITE (1UL << 2) > +#define KVMPPC_DEBUG_WATCH_READ (1UL << 3) > struct kvm_debug_exit_arch {
That says "arch", but it's not in an arch-specific file. > + __u64 pc; > + /* > + * exception -> returns the exception number. If the KVM_DEBUG_EXIT > + * exit is not handled (say not h/w breakpoint or software breakpoint > + * set for this address) by qemu then it is supposed to inject this > + * exception to guest. > + */ > + __u32 exception; > + /* > + * exiting to userspace because of h/w breakpoint, watchpoint > + * (read, write or both) and software breakpoint. > + */ > + __u32 status; > }; What does "exception number" mean in a generic API? What values can go in "status"? > + addi r7, r4, VCPU_HOST_DBG > + mfspr r9, SPRN_DBCR0 > + lwz r8, KVMPPC_DBG_DBCR0(r7) > + andis. r9, r9, DBCR0_AC_BITS@h > + beq skip_load_host_debug > + li r9, 0 > + mtspr SPRN_DBCR0, r9 /* disable all debug event */ > + lwz r9, KVMPPC_DBG_DBCR1(r7) > + mtspr SPRN_DBCR1, r9 > + lwz r9, KVMPPC_DBG_DBCR2(r7) > + mtspr SPRN_DBCR2, r9 > + lwz r9, KVMPPC_DBG_IAC1+4(r7) > + mtspr SPRN_IAC1, r9 > + lwz r9, KVMPPC_DBG_IAC2+4(r7) > + mtspr SPRN_IAC2, r9 > +#if CONFIG_PPC_ADV_DEBUG_IACS > 2 > + lwz r9, KVMPPC_DBG_IAC3+4(r7) > + mtspr SPRN_IAC3, r9 > + lwz r9, KVMPPC_DBG_IAC4+4(r7) > + mtspr SPRN_IAC4, r9 > +#endif What if CONFIG_PPC_ADV_DEBUG_REGS isn't set? -Scott -- To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html