> -----Original Message-----
> From: Alexander Graf [mailto:ag...@suse.de]
> Sent: Thursday, March 07, 2013 6:38 PM
> To: Bhushan Bharat-R65777
> Cc: kvm-...@vger.kernel.org; kvm@vger.kernel.org; Wood Scott-B07421; Bhushan
> Bharat-R65777
> Subject: Re: [PATCH 2/7] Added ONE_REG interface for debug instruction
> 
> 
> On 28.02.2013, at 05:13, Bharat Bhushan wrote:
> 
> > This patch adds the one_reg interface to get the special instruction
> > to be used for setting software breakpoint from userspace.
> >
> > Signed-off-by: Bharat Bhushan <bharat.bhus...@freescale.com>
> > ---
> > Documentation/virtual/kvm/api.txt     |    1 +
> > arch/powerpc/include/asm/kvm_book3s.h |    1 +
> > arch/powerpc/include/asm/kvm_booke.h  |    2 ++
> > arch/powerpc/include/uapi/asm/kvm.h   |    4 ++++
> > arch/powerpc/kvm/book3s.c             |    6 ++++++
> > arch/powerpc/kvm/booke.c              |    6 ++++++
> > 6 files changed, 20 insertions(+), 0 deletions(-)
> >
> > diff --git a/Documentation/virtual/kvm/api.txt
> > b/Documentation/virtual/kvm/api.txt
> > index cce500a..dbfcc04 100644
> > --- a/Documentation/virtual/kvm/api.txt
> > +++ b/Documentation/virtual/kvm/api.txt
> > @@ -1766,6 +1766,7 @@ registers, find a list below:
> >   PPC   | KVM_REG_PPC_TSR   | 32
> >   PPC   | KVM_REG_PPC_OR_TSR        | 32
> >   PPC   | KVM_REG_PPC_CLEAR_TSR     | 32
> > +  PPC   | KVM_REG_PPC_DEBUG_INST| 32
> >
> > 4.69 KVM_GET_ONE_REG
> >
> > diff --git a/arch/powerpc/include/asm/kvm_book3s.h
> > b/arch/powerpc/include/asm/kvm_book3s.h
> > index 5a56e1c..36164cc 100644
> > --- a/arch/powerpc/include/asm/kvm_book3s.h
> > +++ b/arch/powerpc/include/asm/kvm_book3s.h
> > @@ -458,6 +458,7 @@ static inline bool kvmppc_critical_section(struct 
> > kvm_vcpu
> *vcpu)
> > #define OSI_SC_MAGIC_R4                     0x77810F9B
> >
> > #define INS_DCBZ                    0x7c0007ec
> > +#define INS_TW                             0x7c000008
> 
> This one should be "trap", so TO needs to be 31. The instruction as it's here 
> is
> a nop if I read the spec correctly.

Yes I missed this.
BTW rather than setting TO = 31, what if we set TO = 2 as RA and RB is same 
here.

-Bharat

> 
> Alex
> 
> >
> > /* LPIDs we support with this build -- runtime limit may be lower */
> > #define KVMPPC_NR_LPIDS                     (LPID_RSVD + 1)
> > diff --git a/arch/powerpc/include/asm/kvm_booke.h
> > b/arch/powerpc/include/asm/kvm_booke.h
> > index b7cd335..d3c1eb3 100644
> > --- a/arch/powerpc/include/asm/kvm_booke.h
> > +++ b/arch/powerpc/include/asm/kvm_booke.h
> > @@ -26,6 +26,8 @@
> > /* LPIDs we support with this build -- runtime limit may be lower */
> > #define KVMPPC_NR_LPIDS                        64
> >
> > +#define KVMPPC_INST_EHPRIV 0x7c00021c
> > +
> > static inline void kvmppc_set_gpr(struct kvm_vcpu *vcpu, int num,
> > ulong val) {
> >     vcpu->arch.gpr[num] = val;
> > diff --git a/arch/powerpc/include/uapi/asm/kvm.h
> > b/arch/powerpc/include/uapi/asm/kvm.h
> > index ef072b1..c2ff99c 100644
> > --- a/arch/powerpc/include/uapi/asm/kvm.h
> > +++ b/arch/powerpc/include/uapi/asm/kvm.h
> > @@ -422,4 +422,8 @@ struct kvm_get_htab_header {
> > #define KVM_REG_PPC_CLEAR_TSR       (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x88)
> > #define KVM_REG_PPC_TCR             (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x89)
> > #define KVM_REG_PPC_TSR             (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8a)
> > +
> > +/* Debugging: Special instruction for software breakpoint */
> > +#define KVM_REG_PPC_DEBUG_INST     (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8b)
> > +
> > #endif /* __LINUX_KVM_POWERPC_H */
> > diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
> > index a4b6452..975a401 100644
> > --- a/arch/powerpc/kvm/book3s.c
> > +++ b/arch/powerpc/kvm/book3s.c
> > @@ -530,6 +530,12 @@ int kvm_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu,
> struct kvm_one_reg *reg)
> >                     val = get_reg_val(reg->id, vcpu->arch.vscr.u[3]);
> >                     break;
> > #endif /* CONFIG_ALTIVEC */
> > +           case KVM_REG_PPC_DEBUG_INST: {
> > +                   u32 opcode = INS_TW;
> > +                   r = copy_to_user((u32 __user *)(long)reg->addr,
> > +                                    &opcode, sizeof(u32));
> > +                   break;
> > +           }
> >             default:
> >                     r = -EINVAL;
> >                     break;
> > diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index
> > 8b553c0..a41cd6d 100644
> > --- a/arch/powerpc/kvm/booke.c
> > +++ b/arch/powerpc/kvm/booke.c
> > @@ -1448,6 +1448,12 @@ int kvm_vcpu_ioctl_get_one_reg(struct kvm_vcpu *vcpu,
> struct kvm_one_reg *reg)
> >     case KVM_REG_PPC_TSR:
> >             r = put_user(vcpu->arch.tsr, (u32 __user *)(long)reg->addr);
> >             break;
> > +   case KVM_REG_PPC_DEBUG_INST: {
> > +           u32 opcode = KVMPPC_INST_EHPRIV;
> > +           r = copy_to_user((u32 __user *)(long)reg->addr,
> > +                            &opcode, sizeof(u32));
> > +           break;
> > +   }
> >     default:
> >             break;
> >     }
> > --
> > 1.7.0.4
> >
> >
> > --
> > 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
> 


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to