Re: [PATCH 2/7] Added ONE_REG interface for debug instruction

2013-03-14 Thread Alexander Graf

On 14.03.2013, at 05:30, Bhushan Bharat-R65777 wrote:

 
 
 -Original Message-
 From: Alexander Graf [mailto:ag...@suse.de]
 Sent: Thursday, March 07, 2013 6:38 PM
 To: Bhushan Bharat-R65777
 Cc: kvm-ppc@vger.kernel.org; k...@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_DCBZ0x7c0007ec
 +#define INS_TW 0x7c08
 
 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.

Well, the unconditional trap instruction is simply defined as TO = 31, so I'd 
stick to that :)


Alex

--
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


RE: [PATCH 2/7] Added ONE_REG interface for debug instruction

2013-03-13 Thread Bhushan Bharat-R65777


 -Original Message-
 From: Alexander Graf [mailto:ag...@suse.de]
 Sent: Thursday, March 07, 2013 6:38 PM
 To: Bhushan Bharat-R65777
 Cc: kvm-ppc@vger.kernel.org; k...@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_DCBZ0x7c0007ec
  +#define INS_TW 0x7c08
 
 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_LPIDS64
 
  +#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

Re: [PATCH 2/7] Added ONE_REG interface for debug instruction

2013-03-07 Thread Alexander Graf

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   0x7c08

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.

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_LPIDS64
 
 +#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-ppc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/7] Added ONE_REG interface for debug instruction

2013-02-28 Thread Scott Wood

On 02/27/2013 10:13:11 PM, Bharat Bhushan wrote:

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;
+   }


We're using ehpriv even for PR-mode KVM (e.g. e500v2)?

-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


Re: [PATCH 2/7] Added ONE_REG interface for debug instruction

2013-02-28 Thread Alexander Graf

On 28.02.2013, at 17:23, Scott Wood wrote:

 On 02/27/2013 10:13:11 PM, Bharat Bhushan wrote:
 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;
 +}
 
 We're using ehpriv even for PR-mode KVM (e.g. e500v2)?

If it's a reserved instruction, that should work. Since we need to use a single 
instruction to replace the debugged one with, any reserved opcode should be as 
good as any other, right?


Alex

--
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


RE: [PATCH 2/7] Added ONE_REG interface for debug instruction

2013-02-28 Thread Bhushan Bharat-R65777


 -Original Message-
 From: kvm-ppc-ow...@vger.kernel.org [mailto:kvm-ppc-
 ow...@vger.kernel.org] On Behalf Of Alexander Graf
 Sent: Thursday, February 28, 2013 10:22 PM
 To: Wood Scott-B07421
 Cc: Bhushan Bharat-R65777; kvm-ppc@vger.kernel.org; k...@vger.kernel.org;
 Bhushan Bharat-R65777
 Subject: Re: [PATCH 2/7] Added ONE_REG interface for debug instruction
 
 
 On 28.02.2013, at 17:23, Scott Wood wrote:
 
  On 02/27/2013 10:13:11 PM, Bharat Bhushan wrote:
  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;
  +  }
 
  We're using ehpriv even for PR-mode KVM (e.g. e500v2)?
 
 If it's a reserved instruction, that should work. Since we need to use a
 single instruction to replace the debugged one with, any reserved opcode
 should be as good as any other, right?

Right, that has been the idea here.

Thanks
-Bharat

 
 
 Alex
 
 --
 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-ppc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html