Re: [PATCH 3/7] KVM: PPC: debug stub interface parameter defined

2013-03-14 Thread Alexander Graf

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

 
 
 -Original Message-
 From: Alexander Graf [mailto:ag...@suse.de]
 Sent: Thursday, March 07, 2013 6:51 PM
 To: Bhushan Bharat-R65777
 Cc: kvm-ppc@vger.kernel.org; k...@vger.kernel.org; Wood Scott-B07421; Bhushan
 Bharat-R65777
 Subject: Re: [PATCH 3/7] KVM: PPC: debug stub interface parameter defined
 
 
 On 28.02.2013, at 05:13, Bharat Bhushan wrote:
 
 This patch defines the interface parameter for KVM_SET_GUEST_DEBUG
 ioctl support. Follow up patches will use this for setting up hardware
 breakpoints, watchpoints and software breakpoints.
 
 Also kvm_arch_vcpu_ioctl_set_guest_debug() is brought one level below.
 This is because I am not sure what is required for book3s. So this
 ioctl behaviour will not change for book3s.
 
 Signed-off-by: Bharat Bhushan bharat.bhus...@freescale.com
 ---
 arch/powerpc/include/uapi/asm/kvm.h |   23 +++
 arch/powerpc/kvm/book3s.c   |6 ++
 arch/powerpc/kvm/booke.c|6 ++
 arch/powerpc/kvm/powerpc.c  |6 --
 4 files changed, 35 insertions(+), 6 deletions(-)
 
 diff --git a/arch/powerpc/include/uapi/asm/kvm.h
 b/arch/powerpc/include/uapi/asm/kvm.h
 index c2ff99c..15f9a00 100644
 --- a/arch/powerpc/include/uapi/asm/kvm.h
 +++ b/arch/powerpc/include/uapi/asm/kvm.h
 @@ -272,8 +272,31 @@ struct kvm_debug_exit_arch {
 
 /* for KVM_SET_GUEST_DEBUG */
 struct kvm_guest_debug_arch {
 +   struct {
 +   /* H/W breakpoint/watchpoint address */
 +   __u64 addr;
 +   /*
 +* Type denotes h/w breakpoint, read watchpoint, write
 +* watchpoint or watchpoint (both read and write).
 +*/
 +#define KVMPPC_DEBUG_NOTYPE0x0
 +#define KVMPPC_DEBUG_BREAKPOINT(1UL  1)
 +#define KVMPPC_DEBUG_WATCH_WRITE   (1UL  2)
 +#define KVMPPC_DEBUG_WATCH_READ(1UL  3)
 +   __u32 type;
 +   __u32 reserved;
 +   } bp[16];
 };
 
 +/* Debug related defines */
 +/*
 + * kvm_guest_debug-control is a 32 bit field. The lower 16 bits are
 +generic
 + * and upper 16 bits are architecture specific. Architecture specific
 +defines
 + * that ioctl is for setting hardware breakpoint or software breakpoint.
 + */
 +#define KVM_GUESTDBG_USE_SW_BP 0x0001
 +#define KVM_GUESTDBG_USE_HW_BP 0x0002
 
 You only need
 
 #define KVM_GUESTDBG_HW_BP 0x0001
 
 In absence of the flag, it's a SW breakpoint.
 
 We kept this for 2 reasons; 1) Same logic is applied for i386, so trying to 
 keep consistent 2) better clarity.

Jan, was there any special reason to have 2 flags for HW/SW breakpoint on x86 
rather than one bit that indicates which one is used?


Alex

 
 If you want than I can code this as you described.
 
 -Bharat
 
 
 
 Alex
 
 +
 /* definition of registers in kvm_run */ struct kvm_sync_regs { };
 diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
 index 975a401..cb85d73 100644
 --- a/arch/powerpc/kvm/book3s.c
 +++ b/arch/powerpc/kvm/book3s.c
 @@ -613,6 +613,12 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu 
 *vcpu,
 return 0;
 }
 
 +int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
 +   struct kvm_guest_debug *dbg)
 +{
 +   return -EINVAL;
 +}
 +
 void kvmppc_decrementer_func(unsigned long data) {
 struct kvm_vcpu *vcpu = (struct kvm_vcpu *)data; diff --git
 a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index
 a41cd6d..1de93a8 100644
 --- a/arch/powerpc/kvm/booke.c
 +++ b/arch/powerpc/kvm/booke.c
 @@ -1527,6 +1527,12 @@ int kvm_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu,
 struct kvm_one_reg *reg)
 return r;
 }
 
 +int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
 +struct kvm_guest_debug *dbg)
 +{
 +   return -EINVAL;
 +}
 +
 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu
 *fpu) {
 return -ENOTSUPP;
 diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
 index 934413c..4c94ca9 100644
 --- a/arch/powerpc/kvm/powerpc.c
 +++ b/arch/powerpc/kvm/powerpc.c
 @@ -532,12 +532,6 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
 #endif }
 
 -int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
 -struct kvm_guest_debug *dbg)
 -{
 -   return -EINVAL;
 -}
 -
 static void kvmppc_complete_dcr_load(struct kvm_vcpu *vcpu,
 struct kvm_run *run) {
 --
 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 3/7] KVM: PPC: debug stub interface parameter defined

2013-03-14 Thread Jan Kiszka
On 2013-03-14 13:09, Alexander Graf wrote:
 
 On 14.03.2013, at 12:57, Jan Kiszka wrote:
 
 On 2013-03-14 12:54, Alexander Graf wrote:

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



 -Original Message-
 From: Alexander Graf [mailto:ag...@suse.de]
 Sent: Thursday, March 07, 2013 6:51 PM
 To: Bhushan Bharat-R65777
 Cc: kvm-ppc@vger.kernel.org; k...@vger.kernel.org; Wood Scott-B07421; 
 Bhushan
 Bharat-R65777
 Subject: Re: [PATCH 3/7] KVM: PPC: debug stub interface parameter defined


 On 28.02.2013, at 05:13, Bharat Bhushan wrote:

 This patch defines the interface parameter for KVM_SET_GUEST_DEBUG
 ioctl support. Follow up patches will use this for setting up hardware
 breakpoints, watchpoints and software breakpoints.

 Also kvm_arch_vcpu_ioctl_set_guest_debug() is brought one level below.
 This is because I am not sure what is required for book3s. So this
 ioctl behaviour will not change for book3s.

 Signed-off-by: Bharat Bhushan bharat.bhus...@freescale.com
 ---
 arch/powerpc/include/uapi/asm/kvm.h |   23 +++
 arch/powerpc/kvm/book3s.c   |6 ++
 arch/powerpc/kvm/booke.c|6 ++
 arch/powerpc/kvm/powerpc.c  |6 --
 4 files changed, 35 insertions(+), 6 deletions(-)

 diff --git a/arch/powerpc/include/uapi/asm/kvm.h
 b/arch/powerpc/include/uapi/asm/kvm.h
 index c2ff99c..15f9a00 100644
 --- a/arch/powerpc/include/uapi/asm/kvm.h
 +++ b/arch/powerpc/include/uapi/asm/kvm.h
 @@ -272,8 +272,31 @@ struct kvm_debug_exit_arch {

 /* for KVM_SET_GUEST_DEBUG */
 struct kvm_guest_debug_arch {
 +struct {
 +/* H/W breakpoint/watchpoint address */
 +__u64 addr;
 +/*
 + * Type denotes h/w breakpoint, read watchpoint, write
 + * watchpoint or watchpoint (both read and write).
 + */
 +#define KVMPPC_DEBUG_NOTYPE 0x0
 +#define KVMPPC_DEBUG_BREAKPOINT (1UL  1)
 +#define KVMPPC_DEBUG_WATCH_WRITE(1UL  2)
 +#define KVMPPC_DEBUG_WATCH_READ (1UL  3)
 +__u32 type;
 +__u32 reserved;
 +} bp[16];
 };

 +/* Debug related defines */
 +/*
 + * kvm_guest_debug-control is a 32 bit field. The lower 16 bits are
 +generic
 + * and upper 16 bits are architecture specific. Architecture specific
 +defines
 + * that ioctl is for setting hardware breakpoint or software breakpoint.
 + */
 +#define KVM_GUESTDBG_USE_SW_BP  0x0001
 +#define KVM_GUESTDBG_USE_HW_BP  0x0002

 You only need

 #define KVM_GUESTDBG_HW_BP 0x0001

 In absence of the flag, it's a SW breakpoint.

 We kept this for 2 reasons; 1) Same logic is applied for i386, so trying 
 to keep consistent 2) better clarity.

 Jan, was there any special reason to have 2 flags for HW/SW breakpoint on 
 x86 rather than one bit that indicates which one is used?

 Different mechanics on x86: HW goes via debug registers and shows up as
 INT1, SW is INT3 (plus guest patching done by user land).
 
 Well, the same thing goes for us. What I'm asking is whether there is a 
 specific reason (extensibility, oversight, taste, ...) that you did
 
 #define KVM_GUESTDBG_USE_SW_BP   0x0001
 #define KVM_GUESTDBG_USE_HW_BP   0x0002
 
 rather than
 
 #define KVM_GUESTDBG_BP_TYPE  0x0001
 #define KVM_GUESTDBG_BP_TYPE_SW   0x0001
 #define KVM_GUESTDBG_BP_TYPE_HW   0x
 
 :)

Those bits enable or disable the features separately. You may also leave
both off if you like (and just use single stepping).

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SDP-DE
Corporate Competence Center Embedded Linux
--
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 3/7] KVM: PPC: debug stub interface parameter defined

2013-03-14 Thread Alexander Graf

On 14.03.2013, at 13:13, Jan Kiszka wrote:

 On 2013-03-14 13:09, Alexander Graf wrote:
 
 On 14.03.2013, at 12:57, Jan Kiszka wrote:
 
 On 2013-03-14 12:54, Alexander Graf wrote:
 
 On 14.03.2013, at 05:42, Bhushan Bharat-R65777 wrote:
 
 
 
 -Original Message-
 From: Alexander Graf [mailto:ag...@suse.de]
 Sent: Thursday, March 07, 2013 6:51 PM
 To: Bhushan Bharat-R65777
 Cc: kvm-ppc@vger.kernel.org; k...@vger.kernel.org; Wood Scott-B07421; 
 Bhushan
 Bharat-R65777
 Subject: Re: [PATCH 3/7] KVM: PPC: debug stub interface parameter defined
 
 
 On 28.02.2013, at 05:13, Bharat Bhushan wrote:
 
 This patch defines the interface parameter for KVM_SET_GUEST_DEBUG
 ioctl support. Follow up patches will use this for setting up hardware
 breakpoints, watchpoints and software breakpoints.
 
 Also kvm_arch_vcpu_ioctl_set_guest_debug() is brought one level below.
 This is because I am not sure what is required for book3s. So this
 ioctl behaviour will not change for book3s.
 
 Signed-off-by: Bharat Bhushan bharat.bhus...@freescale.com
 ---
 arch/powerpc/include/uapi/asm/kvm.h |   23 +++
 arch/powerpc/kvm/book3s.c   |6 ++
 arch/powerpc/kvm/booke.c|6 ++
 arch/powerpc/kvm/powerpc.c  |6 --
 4 files changed, 35 insertions(+), 6 deletions(-)
 
 diff --git a/arch/powerpc/include/uapi/asm/kvm.h
 b/arch/powerpc/include/uapi/asm/kvm.h
 index c2ff99c..15f9a00 100644
 --- a/arch/powerpc/include/uapi/asm/kvm.h
 +++ b/arch/powerpc/include/uapi/asm/kvm.h
 @@ -272,8 +272,31 @@ struct kvm_debug_exit_arch {
 
 /* for KVM_SET_GUEST_DEBUG */
 struct kvm_guest_debug_arch {
 +   struct {
 +   /* H/W breakpoint/watchpoint address */
 +   __u64 addr;
 +   /*
 +* Type denotes h/w breakpoint, read watchpoint, write
 +* watchpoint or watchpoint (both read and write).
 +*/
 +#define KVMPPC_DEBUG_NOTYPE0x0
 +#define KVMPPC_DEBUG_BREAKPOINT(1UL  1)
 +#define KVMPPC_DEBUG_WATCH_WRITE   (1UL  2)
 +#define KVMPPC_DEBUG_WATCH_READ(1UL  3)
 +   __u32 type;
 +   __u32 reserved;
 +   } bp[16];
 };
 
 +/* Debug related defines */
 +/*
 + * kvm_guest_debug-control is a 32 bit field. The lower 16 bits are
 +generic
 + * and upper 16 bits are architecture specific. Architecture specific
 +defines
 + * that ioctl is for setting hardware breakpoint or software 
 breakpoint.
 + */
 +#define KVM_GUESTDBG_USE_SW_BP 0x0001
 +#define KVM_GUESTDBG_USE_HW_BP 0x0002
 
 You only need
 
 #define KVM_GUESTDBG_HW_BP 0x0001
 
 In absence of the flag, it's a SW breakpoint.
 
 We kept this for 2 reasons; 1) Same logic is applied for i386, so trying 
 to keep consistent 2) better clarity.
 
 Jan, was there any special reason to have 2 flags for HW/SW breakpoint on 
 x86 rather than one bit that indicates which one is used?
 
 Different mechanics on x86: HW goes via debug registers and shows up as
 INT1, SW is INT3 (plus guest patching done by user land).
 
 Well, the same thing goes for us. What I'm asking is whether there is a 
 specific reason (extensibility, oversight, taste, ...) that you did
 
#define KVM_GUESTDBG_USE_SW_BP   0x0001
#define KVM_GUESTDBG_USE_HW_BP   0x0002
 
 rather than
 
#define KVM_GUESTDBG_BP_TYPE  0x0001
#define KVM_GUESTDBG_BP_TYPE_SW   0x0001
#define KVM_GUESTDBG_BP_TYPE_HW   0x
 
 :)
 
 Those bits enable or disable the features separately. You may also leave
 both off if you like (and just use single stepping).

Ah, so these are global configuration bits, not per-breakpoint configuration?


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 3/7] KVM: PPC: debug stub interface parameter defined

2013-03-14 Thread Jan Kiszka
On 2013-03-14 13:19, Alexander Graf wrote:
 
 On 14.03.2013, at 13:13, Jan Kiszka wrote:
 
 On 2013-03-14 13:09, Alexander Graf wrote:

 On 14.03.2013, at 12:57, Jan Kiszka wrote:

 On 2013-03-14 12:54, Alexander Graf wrote:

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



 -Original Message-
 From: Alexander Graf [mailto:ag...@suse.de]
 Sent: Thursday, March 07, 2013 6:51 PM
 To: Bhushan Bharat-R65777
 Cc: kvm-ppc@vger.kernel.org; k...@vger.kernel.org; Wood Scott-B07421; 
 Bhushan
 Bharat-R65777
 Subject: Re: [PATCH 3/7] KVM: PPC: debug stub interface parameter 
 defined


 On 28.02.2013, at 05:13, Bharat Bhushan wrote:

 This patch defines the interface parameter for KVM_SET_GUEST_DEBUG
 ioctl support. Follow up patches will use this for setting up hardware
 breakpoints, watchpoints and software breakpoints.

 Also kvm_arch_vcpu_ioctl_set_guest_debug() is brought one level below.
 This is because I am not sure what is required for book3s. So this
 ioctl behaviour will not change for book3s.

 Signed-off-by: Bharat Bhushan bharat.bhus...@freescale.com
 ---
 arch/powerpc/include/uapi/asm/kvm.h |   23 +++
 arch/powerpc/kvm/book3s.c   |6 ++
 arch/powerpc/kvm/booke.c|6 ++
 arch/powerpc/kvm/powerpc.c  |6 --
 4 files changed, 35 insertions(+), 6 deletions(-)

 diff --git a/arch/powerpc/include/uapi/asm/kvm.h
 b/arch/powerpc/include/uapi/asm/kvm.h
 index c2ff99c..15f9a00 100644
 --- a/arch/powerpc/include/uapi/asm/kvm.h
 +++ b/arch/powerpc/include/uapi/asm/kvm.h
 @@ -272,8 +272,31 @@ struct kvm_debug_exit_arch {

 /* for KVM_SET_GUEST_DEBUG */
 struct kvm_guest_debug_arch {
 +  struct {
 +  /* H/W breakpoint/watchpoint address */
 +  __u64 addr;
 +  /*
 +   * Type denotes h/w breakpoint, read watchpoint, write
 +   * watchpoint or watchpoint (both read and write).
 +   */
 +#define KVMPPC_DEBUG_NOTYPE   0x0
 +#define KVMPPC_DEBUG_BREAKPOINT   (1UL  1)
 +#define KVMPPC_DEBUG_WATCH_WRITE  (1UL  2)
 +#define KVMPPC_DEBUG_WATCH_READ   (1UL  3)
 +  __u32 type;
 +  __u32 reserved;
 +  } bp[16];
 };

 +/* Debug related defines */
 +/*
 + * kvm_guest_debug-control is a 32 bit field. The lower 16 bits are
 +generic
 + * and upper 16 bits are architecture specific. Architecture specific
 +defines
 + * that ioctl is for setting hardware breakpoint or software 
 breakpoint.
 + */
 +#define KVM_GUESTDBG_USE_SW_BP0x0001
 +#define KVM_GUESTDBG_USE_HW_BP0x0002

 You only need

 #define KVM_GUESTDBG_HW_BP 0x0001

 In absence of the flag, it's a SW breakpoint.

 We kept this for 2 reasons; 1) Same logic is applied for i386, so trying 
 to keep consistent 2) better clarity.

 Jan, was there any special reason to have 2 flags for HW/SW breakpoint on 
 x86 rather than one bit that indicates which one is used?

 Different mechanics on x86: HW goes via debug registers and shows up as
 INT1, SW is INT3 (plus guest patching done by user land).

 Well, the same thing goes for us. What I'm asking is whether there is a 
 specific reason (extensibility, oversight, taste, ...) that you did

#define KVM_GUESTDBG_USE_SW_BP   0x0001
#define KVM_GUESTDBG_USE_HW_BP   0x0002

 rather than

#define KVM_GUESTDBG_BP_TYPE 0x0001
#define KVM_GUESTDBG_BP_TYPE_SW  0x0001
#define KVM_GUESTDBG_BP_TYPE_HW  0x

 :)

 Those bits enable or disable the features separately. You may also leave
 both off if you like (and just use single stepping).
 
 Ah, so these are global configuration bits, not per-breakpoint configuration?

Yes, the are meant for kvm_guest_debug.control on x86. I see that this
is apparently different for ppc. Those bits you cited just control the
general enabling of hard or soft BPs, not the activation of individual
one. That is encoded into the BP registers on x86.

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SDP-DE
Corporate Competence Center Embedded Linux
--
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 3/7] KVM: PPC: debug stub interface parameter defined

2013-03-14 Thread Alexander Graf

On 14.03.2013, at 13:22, Jan Kiszka wrote:

 On 2013-03-14 13:19, Alexander Graf wrote:
 
 On 14.03.2013, at 13:13, Jan Kiszka wrote:
 
 On 2013-03-14 13:09, Alexander Graf wrote:
 
 On 14.03.2013, at 12:57, Jan Kiszka wrote:
 
 On 2013-03-14 12:54, Alexander Graf wrote:
 
 On 14.03.2013, at 05:42, Bhushan Bharat-R65777 wrote:
 
 
 
 -Original Message-
 From: Alexander Graf [mailto:ag...@suse.de]
 Sent: Thursday, March 07, 2013 6:51 PM
 To: Bhushan Bharat-R65777
 Cc: kvm-ppc@vger.kernel.org; k...@vger.kernel.org; Wood Scott-B07421; 
 Bhushan
 Bharat-R65777
 Subject: Re: [PATCH 3/7] KVM: PPC: debug stub interface parameter 
 defined
 
 
 On 28.02.2013, at 05:13, Bharat Bhushan wrote:
 
 This patch defines the interface parameter for KVM_SET_GUEST_DEBUG
 ioctl support. Follow up patches will use this for setting up hardware
 breakpoints, watchpoints and software breakpoints.
 
 Also kvm_arch_vcpu_ioctl_set_guest_debug() is brought one level below.
 This is because I am not sure what is required for book3s. So this
 ioctl behaviour will not change for book3s.
 
 Signed-off-by: Bharat Bhushan bharat.bhus...@freescale.com
 ---
 arch/powerpc/include/uapi/asm/kvm.h |   23 +++
 arch/powerpc/kvm/book3s.c   |6 ++
 arch/powerpc/kvm/booke.c|6 ++
 arch/powerpc/kvm/powerpc.c  |6 --
 4 files changed, 35 insertions(+), 6 deletions(-)
 
 diff --git a/arch/powerpc/include/uapi/asm/kvm.h
 b/arch/powerpc/include/uapi/asm/kvm.h
 index c2ff99c..15f9a00 100644
 --- a/arch/powerpc/include/uapi/asm/kvm.h
 +++ b/arch/powerpc/include/uapi/asm/kvm.h
 @@ -272,8 +272,31 @@ struct kvm_debug_exit_arch {
 
 /* for KVM_SET_GUEST_DEBUG */
 struct kvm_guest_debug_arch {
 + struct {
 + /* H/W breakpoint/watchpoint address */
 + __u64 addr;
 + /*
 +  * Type denotes h/w breakpoint, read watchpoint, write
 +  * watchpoint or watchpoint (both read and write).
 +  */
 +#define KVMPPC_DEBUG_NOTYPE  0x0
 +#define KVMPPC_DEBUG_BREAKPOINT  (1UL  1)
 +#define KVMPPC_DEBUG_WATCH_WRITE (1UL  2)
 +#define KVMPPC_DEBUG_WATCH_READ  (1UL  3)
 + __u32 type;
 + __u32 reserved;
 + } bp[16];
 };
 
 +/* Debug related defines */
 +/*
 + * kvm_guest_debug-control is a 32 bit field. The lower 16 bits are
 +generic
 + * and upper 16 bits are architecture specific. Architecture specific
 +defines
 + * that ioctl is for setting hardware breakpoint or software 
 breakpoint.
 + */
 +#define KVM_GUESTDBG_USE_SW_BP   0x0001
 +#define KVM_GUESTDBG_USE_HW_BP   0x0002
 
 You only need
 
 #define KVM_GUESTDBG_HW_BP 0x0001
 
 In absence of the flag, it's a SW breakpoint.
 
 We kept this for 2 reasons; 1) Same logic is applied for i386, so 
 trying to keep consistent 2) better clarity.
 
 Jan, was there any special reason to have 2 flags for HW/SW breakpoint 
 on x86 rather than one bit that indicates which one is used?
 
 Different mechanics on x86: HW goes via debug registers and shows up as
 INT1, SW is INT3 (plus guest patching done by user land).
 
 Well, the same thing goes for us. What I'm asking is whether there is a 
 specific reason (extensibility, oversight, taste, ...) that you did
 
   #define KVM_GUESTDBG_USE_SW_BP   0x0001
   #define KVM_GUESTDBG_USE_HW_BP   0x0002
 
 rather than
 
   #define KVM_GUESTDBG_BP_TYPE 0x0001
   #define KVM_GUESTDBG_BP_TYPE_SW  0x0001
   #define KVM_GUESTDBG_BP_TYPE_HW  0x
 
 :)
 
 Those bits enable or disable the features separately. You may also leave
 both off if you like (and just use single stepping).
 
 Ah, so these are global configuration bits, not per-breakpoint configuration?
 
 Yes, the are meant for kvm_guest_debug.control on x86. I see that this
 is apparently different for ppc. Those bits you cited just control the
 general enabling of hard or soft BPs, not the activation of individual
 one. That is encoded into the BP registers on x86.

I suppose the same thing applies for PPC and I simply didn't realize it :).

So Bharat, if these bits are used for global configuration whether a specific 
debug type is routed to user space, having separate bits is the way to go.


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 3/7] KVM: PPC: debug stub interface parameter defined

2013-03-13 Thread Bhushan Bharat-R65777


 -Original Message-
 From: Alexander Graf [mailto:ag...@suse.de]
 Sent: Thursday, March 07, 2013 6:51 PM
 To: Bhushan Bharat-R65777
 Cc: kvm-ppc@vger.kernel.org; k...@vger.kernel.org; Wood Scott-B07421; Bhushan
 Bharat-R65777
 Subject: Re: [PATCH 3/7] KVM: PPC: debug stub interface parameter defined
 
 
 On 28.02.2013, at 05:13, Bharat Bhushan wrote:
 
  This patch defines the interface parameter for KVM_SET_GUEST_DEBUG
  ioctl support. Follow up patches will use this for setting up hardware
  breakpoints, watchpoints and software breakpoints.
 
  Also kvm_arch_vcpu_ioctl_set_guest_debug() is brought one level below.
  This is because I am not sure what is required for book3s. So this
  ioctl behaviour will not change for book3s.
 
  Signed-off-by: Bharat Bhushan bharat.bhus...@freescale.com
  ---
  arch/powerpc/include/uapi/asm/kvm.h |   23 +++
  arch/powerpc/kvm/book3s.c   |6 ++
  arch/powerpc/kvm/booke.c|6 ++
  arch/powerpc/kvm/powerpc.c  |6 --
  4 files changed, 35 insertions(+), 6 deletions(-)
 
  diff --git a/arch/powerpc/include/uapi/asm/kvm.h
  b/arch/powerpc/include/uapi/asm/kvm.h
  index c2ff99c..15f9a00 100644
  --- a/arch/powerpc/include/uapi/asm/kvm.h
  +++ b/arch/powerpc/include/uapi/asm/kvm.h
  @@ -272,8 +272,31 @@ struct kvm_debug_exit_arch {
 
  /* for KVM_SET_GUEST_DEBUG */
  struct kvm_guest_debug_arch {
  +   struct {
  +   /* H/W breakpoint/watchpoint address */
  +   __u64 addr;
  +   /*
  +* Type denotes h/w breakpoint, read watchpoint, write
  +* watchpoint or watchpoint (both read and write).
  +*/
  +#define KVMPPC_DEBUG_NOTYPE0x0
  +#define KVMPPC_DEBUG_BREAKPOINT(1UL  1)
  +#define KVMPPC_DEBUG_WATCH_WRITE   (1UL  2)
  +#define KVMPPC_DEBUG_WATCH_READ(1UL  3)
  +   __u32 type;
  +   __u32 reserved;
  +   } bp[16];
  };
 
  +/* Debug related defines */
  +/*
  + * kvm_guest_debug-control is a 32 bit field. The lower 16 bits are
  +generic
  + * and upper 16 bits are architecture specific. Architecture specific
  +defines
  + * that ioctl is for setting hardware breakpoint or software breakpoint.
  + */
  +#define KVM_GUESTDBG_USE_SW_BP 0x0001
  +#define KVM_GUESTDBG_USE_HW_BP 0x0002
 
 You only need
 
 #define KVM_GUESTDBG_HW_BP 0x0001
 
 In absence of the flag, it's a SW breakpoint.

We kept this for 2 reasons; 1) Same logic is applied for i386, so trying to 
keep consistent 2) better clarity.

If you want than I can code this as you described.

-Bharat

 
 
 Alex
 
  +
  /* definition of registers in kvm_run */ struct kvm_sync_regs { };
  diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
  index 975a401..cb85d73 100644
  --- a/arch/powerpc/kvm/book3s.c
  +++ b/arch/powerpc/kvm/book3s.c
  @@ -613,6 +613,12 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu 
  *vcpu,
  return 0;
  }
 
  +int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
  +   struct kvm_guest_debug *dbg)
  +{
  +   return -EINVAL;
  +}
  +
  void kvmppc_decrementer_func(unsigned long data) {
  struct kvm_vcpu *vcpu = (struct kvm_vcpu *)data; diff --git
  a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index
  a41cd6d..1de93a8 100644
  --- a/arch/powerpc/kvm/booke.c
  +++ b/arch/powerpc/kvm/booke.c
  @@ -1527,6 +1527,12 @@ int kvm_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu,
 struct kvm_one_reg *reg)
  return r;
  }
 
  +int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
  +struct kvm_guest_debug *dbg)
  +{
  +   return -EINVAL;
  +}
  +
  int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu
  *fpu) {
  return -ENOTSUPP;
  diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
  index 934413c..4c94ca9 100644
  --- a/arch/powerpc/kvm/powerpc.c
  +++ b/arch/powerpc/kvm/powerpc.c
  @@ -532,12 +532,6 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
  #endif }
 
  -int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
  -struct kvm_guest_debug *dbg)
  -{
  -   return -EINVAL;
  -}
  -
  static void kvmppc_complete_dcr_load(struct kvm_vcpu *vcpu,
   struct kvm_run *run) {
  --
  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


Re: [PATCH 3/7] KVM: PPC: debug stub interface parameter defined

2013-03-07 Thread Alexander Graf

On 28.02.2013, at 05:13, Bharat Bhushan wrote:

 This patch defines the interface parameter for KVM_SET_GUEST_DEBUG
 ioctl support. Follow up patches will use this for setting up
 hardware breakpoints, watchpoints and software breakpoints.
 
 Also kvm_arch_vcpu_ioctl_set_guest_debug() is brought one level below.
 This is because I am not sure what is required for book3s. So this ioctl
 behaviour will not change for book3s.
 
 Signed-off-by: Bharat Bhushan bharat.bhus...@freescale.com
 ---
 arch/powerpc/include/uapi/asm/kvm.h |   23 +++
 arch/powerpc/kvm/book3s.c   |6 ++
 arch/powerpc/kvm/booke.c|6 ++
 arch/powerpc/kvm/powerpc.c  |6 --
 4 files changed, 35 insertions(+), 6 deletions(-)
 
 diff --git a/arch/powerpc/include/uapi/asm/kvm.h 
 b/arch/powerpc/include/uapi/asm/kvm.h
 index c2ff99c..15f9a00 100644
 --- a/arch/powerpc/include/uapi/asm/kvm.h
 +++ b/arch/powerpc/include/uapi/asm/kvm.h
 @@ -272,8 +272,31 @@ struct kvm_debug_exit_arch {
 
 /* for KVM_SET_GUEST_DEBUG */
 struct kvm_guest_debug_arch {
 + struct {
 + /* H/W breakpoint/watchpoint address */
 + __u64 addr;
 + /*
 +  * Type denotes h/w breakpoint, read watchpoint, write
 +  * watchpoint or watchpoint (both read and write).
 +  */
 +#define KVMPPC_DEBUG_NOTYPE  0x0
 +#define KVMPPC_DEBUG_BREAKPOINT  (1UL  1)
 +#define KVMPPC_DEBUG_WATCH_WRITE (1UL  2)
 +#define KVMPPC_DEBUG_WATCH_READ  (1UL  3)
 + __u32 type;
 + __u32 reserved;
 + } bp[16];
 };
 
 +/* Debug related defines */
 +/*
 + * kvm_guest_debug-control is a 32 bit field. The lower 16 bits are generic
 + * and upper 16 bits are architecture specific. Architecture specific defines
 + * that ioctl is for setting hardware breakpoint or software breakpoint.
 + */
 +#define KVM_GUESTDBG_USE_SW_BP   0x0001
 +#define KVM_GUESTDBG_USE_HW_BP   0x0002

You only need

#define KVM_GUESTDBG_HW_BP 0x0001

In absence of the flag, it's a SW breakpoint.


Alex

 +
 /* definition of registers in kvm_run */
 struct kvm_sync_regs {
 };
 diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
 index 975a401..cb85d73 100644
 --- a/arch/powerpc/kvm/book3s.c
 +++ b/arch/powerpc/kvm/book3s.c
 @@ -613,6 +613,12 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
   return 0;
 }
 
 +int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
 + struct kvm_guest_debug *dbg)
 +{
 + return -EINVAL;
 +}
 +
 void kvmppc_decrementer_func(unsigned long data)
 {
   struct kvm_vcpu *vcpu = (struct kvm_vcpu *)data;
 diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
 index a41cd6d..1de93a8 100644
 --- a/arch/powerpc/kvm/booke.c
 +++ b/arch/powerpc/kvm/booke.c
 @@ -1527,6 +1527,12 @@ int kvm_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu, 
 struct kvm_one_reg *reg)
   return r;
 }
 
 +int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
 +  struct kvm_guest_debug *dbg)
 +{
 + return -EINVAL;
 +}
 +
 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
 {
   return -ENOTSUPP;
 diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
 index 934413c..4c94ca9 100644
 --- a/arch/powerpc/kvm/powerpc.c
 +++ b/arch/powerpc/kvm/powerpc.c
 @@ -532,12 +532,6 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
 #endif
 }
 
 -int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
 -struct kvm_guest_debug *dbg)
 -{
 - return -EINVAL;
 -}
 -
 static void kvmppc_complete_dcr_load(struct kvm_vcpu *vcpu,
  struct kvm_run *run)
 {
 -- 
 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


[PATCH 3/7] KVM: PPC: debug stub interface parameter defined

2013-02-27 Thread Bharat Bhushan
This patch defines the interface parameter for KVM_SET_GUEST_DEBUG
ioctl support. Follow up patches will use this for setting up
hardware breakpoints, watchpoints and software breakpoints.

Also kvm_arch_vcpu_ioctl_set_guest_debug() is brought one level below.
This is because I am not sure what is required for book3s. So this ioctl
behaviour will not change for book3s.

Signed-off-by: Bharat Bhushan bharat.bhus...@freescale.com
---
 arch/powerpc/include/uapi/asm/kvm.h |   23 +++
 arch/powerpc/kvm/book3s.c   |6 ++
 arch/powerpc/kvm/booke.c|6 ++
 arch/powerpc/kvm/powerpc.c  |6 --
 4 files changed, 35 insertions(+), 6 deletions(-)

diff --git a/arch/powerpc/include/uapi/asm/kvm.h 
b/arch/powerpc/include/uapi/asm/kvm.h
index c2ff99c..15f9a00 100644
--- a/arch/powerpc/include/uapi/asm/kvm.h
+++ b/arch/powerpc/include/uapi/asm/kvm.h
@@ -272,8 +272,31 @@ struct kvm_debug_exit_arch {
 
 /* for KVM_SET_GUEST_DEBUG */
 struct kvm_guest_debug_arch {
+   struct {
+   /* H/W breakpoint/watchpoint address */
+   __u64 addr;
+   /*
+* Type denotes h/w breakpoint, read watchpoint, write
+* watchpoint or watchpoint (both read and write).
+*/
+#define KVMPPC_DEBUG_NOTYPE0x0
+#define KVMPPC_DEBUG_BREAKPOINT(1UL  1)
+#define KVMPPC_DEBUG_WATCH_WRITE   (1UL  2)
+#define KVMPPC_DEBUG_WATCH_READ(1UL  3)
+   __u32 type;
+   __u32 reserved;
+   } bp[16];
 };
 
+/* Debug related defines */
+/*
+ * kvm_guest_debug-control is a 32 bit field. The lower 16 bits are generic
+ * and upper 16 bits are architecture specific. Architecture specific defines
+ * that ioctl is for setting hardware breakpoint or software breakpoint.
+ */
+#define KVM_GUESTDBG_USE_SW_BP 0x0001
+#define KVM_GUESTDBG_USE_HW_BP 0x0002
+
 /* definition of registers in kvm_run */
 struct kvm_sync_regs {
 };
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
index 975a401..cb85d73 100644
--- a/arch/powerpc/kvm/book3s.c
+++ b/arch/powerpc/kvm/book3s.c
@@ -613,6 +613,12 @@ int kvm_arch_vcpu_ioctl_translate(struct kvm_vcpu *vcpu,
return 0;
 }
 
+int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
+   struct kvm_guest_debug *dbg)
+{
+   return -EINVAL;
+}
+
 void kvmppc_decrementer_func(unsigned long data)
 {
struct kvm_vcpu *vcpu = (struct kvm_vcpu *)data;
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index a41cd6d..1de93a8 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -1527,6 +1527,12 @@ int kvm_vcpu_ioctl_set_one_reg(struct kvm_vcpu *vcpu, 
struct kvm_one_reg *reg)
return r;
 }
 
+int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
+struct kvm_guest_debug *dbg)
+{
+   return -EINVAL;
+}
+
 int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
 {
return -ENOTSUPP;
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
index 934413c..4c94ca9 100644
--- a/arch/powerpc/kvm/powerpc.c
+++ b/arch/powerpc/kvm/powerpc.c
@@ -532,12 +532,6 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
 #endif
 }
 
-int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
-struct kvm_guest_debug *dbg)
-{
-   return -EINVAL;
-}
-
 static void kvmppc_complete_dcr_load(struct kvm_vcpu *vcpu,
  struct kvm_run *run)
 {
-- 
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