Re: [PATCH 2/2] uprobes/powerpc: Make use of generic routines to enable single step

2012-11-26 Thread Suzuki K. Poulose

On 11/26/2012 10:31 PM, Oleg Nesterov wrote:

On 11/26, Suzuki K. Poulose wrote:


@@ -121,8 +125,11 @@ int arch_uprobe_post_xol(struct arch_uprobe *auprobe, 
struct pt_regs *regs)
 * to be executed.
 */
regs->nip = utask->vaddr + MAX_UINSN_BYTES;
+   regs->msr = utask->autask.saved_msr;
+#ifdef CONFIG_PPC_ADV_DEBUG_REGS
+   mtspr(SPRN_DBCR0, utask->autask.saved_dbcr);
+#endif

-   user_disable_single_step(current);


Don't we need the same change in arch_uprobe_abort_xol() ?

Yes, we do. Thanks for catching that. I will fix it.

Thanks for the review.

Suzuki

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/2] uprobes/powerpc: Make use of generic routines to enable single step

2012-11-26 Thread Oleg Nesterov
On 11/26, Suzuki K. Poulose wrote:
>
> @@ -121,8 +125,11 @@ int arch_uprobe_post_xol(struct arch_uprobe *auprobe, 
> struct pt_regs *regs)
>* to be executed.
>*/
>   regs->nip = utask->vaddr + MAX_UINSN_BYTES;
> + regs->msr = utask->autask.saved_msr;
> +#ifdef CONFIG_PPC_ADV_DEBUG_REGS
> + mtspr(SPRN_DBCR0, utask->autask.saved_dbcr);
> +#endif
>  
> - user_disable_single_step(current);

Don't we need the same change in arch_uprobe_abort_xol() ?

Oleg.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/2] uprobes/powerpc: Make use of generic routines to enable single step

2012-11-26 Thread Suzuki K. Poulose
From: Suzuki K. Poulose 

Replace the ptrace helpers with the powerpc generic routines to
enable/disable single step. We save/restore the MSR (and DCBR for BookE)
across for the operation.


Signed-off-by: Suzuki K. Poulose 
---
 arch/powerpc/include/asm/uprobes.h |4 
 arch/powerpc/kernel/uprobes.c  |   11 +--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/include/asm/uprobes.h 
b/arch/powerpc/include/asm/uprobes.h
index b532060..884be93 100644
--- a/arch/powerpc/include/asm/uprobes.h
+++ b/arch/powerpc/include/asm/uprobes.h
@@ -43,6 +43,10 @@ struct arch_uprobe {
 
 struct arch_uprobe_task {
unsigned long   saved_trap_nr;
+   unsigned long   saved_msr;
+#ifdef CONFIG_PPC_ADV_DEBUG_REGS
+   unsigned long   saved_dbcr;
+#endif
 };
 
 extern int  arch_uprobe_analyze_insn(struct arch_uprobe *aup, struct mm_struct 
*mm, unsigned long addr);
diff --git a/arch/powerpc/kernel/uprobes.c b/arch/powerpc/kernel/uprobes.c
index bc77834..c407c07 100644
--- a/arch/powerpc/kernel/uprobes.c
+++ b/arch/powerpc/kernel/uprobes.c
@@ -62,10 +62,14 @@ int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct 
pt_regs *regs)
struct arch_uprobe_task *autask = >utask->autask;
 
autask->saved_trap_nr = current->thread.trap_nr;
+   autask->saved_msr = regs->msr;
+#ifdef CONFIG_PPC_ADV_DEBUG_REGS
+   autask->saved_dbcr = mfspr(SPRN_DBCR0);
+#endif
current->thread.trap_nr = UPROBE_TRAP_NR;
regs->nip = current->utask->xol_vaddr;
 
-   user_enable_single_step(current);
+   enable_single_step(regs);
return 0;
 }
 
@@ -121,8 +125,11 @@ int arch_uprobe_post_xol(struct arch_uprobe *auprobe, 
struct pt_regs *regs)
 * to be executed.
 */
regs->nip = utask->vaddr + MAX_UINSN_BYTES;
+   regs->msr = utask->autask.saved_msr;
+#ifdef CONFIG_PPC_ADV_DEBUG_REGS
+   mtspr(SPRN_DBCR0, utask->autask.saved_dbcr);
+#endif
 
-   user_disable_single_step(current);
return 0;
 }
 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/2] uprobes/powerpc: Make use of generic routines to enable single step

2012-11-26 Thread Suzuki K. Poulose
From: Suzuki K. Poulose suz...@in.ibm.com

Replace the ptrace helpers with the powerpc generic routines to
enable/disable single step. We save/restore the MSR (and DCBR for BookE)
across for the operation.


Signed-off-by: Suzuki K. Poulose suz...@in.ibm.com
---
 arch/powerpc/include/asm/uprobes.h |4 
 arch/powerpc/kernel/uprobes.c  |   11 +--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/include/asm/uprobes.h 
b/arch/powerpc/include/asm/uprobes.h
index b532060..884be93 100644
--- a/arch/powerpc/include/asm/uprobes.h
+++ b/arch/powerpc/include/asm/uprobes.h
@@ -43,6 +43,10 @@ struct arch_uprobe {
 
 struct arch_uprobe_task {
unsigned long   saved_trap_nr;
+   unsigned long   saved_msr;
+#ifdef CONFIG_PPC_ADV_DEBUG_REGS
+   unsigned long   saved_dbcr;
+#endif
 };
 
 extern int  arch_uprobe_analyze_insn(struct arch_uprobe *aup, struct mm_struct 
*mm, unsigned long addr);
diff --git a/arch/powerpc/kernel/uprobes.c b/arch/powerpc/kernel/uprobes.c
index bc77834..c407c07 100644
--- a/arch/powerpc/kernel/uprobes.c
+++ b/arch/powerpc/kernel/uprobes.c
@@ -62,10 +62,14 @@ int arch_uprobe_pre_xol(struct arch_uprobe *auprobe, struct 
pt_regs *regs)
struct arch_uprobe_task *autask = current-utask-autask;
 
autask-saved_trap_nr = current-thread.trap_nr;
+   autask-saved_msr = regs-msr;
+#ifdef CONFIG_PPC_ADV_DEBUG_REGS
+   autask-saved_dbcr = mfspr(SPRN_DBCR0);
+#endif
current-thread.trap_nr = UPROBE_TRAP_NR;
regs-nip = current-utask-xol_vaddr;
 
-   user_enable_single_step(current);
+   enable_single_step(regs);
return 0;
 }
 
@@ -121,8 +125,11 @@ int arch_uprobe_post_xol(struct arch_uprobe *auprobe, 
struct pt_regs *regs)
 * to be executed.
 */
regs-nip = utask-vaddr + MAX_UINSN_BYTES;
+   regs-msr = utask-autask.saved_msr;
+#ifdef CONFIG_PPC_ADV_DEBUG_REGS
+   mtspr(SPRN_DBCR0, utask-autask.saved_dbcr);
+#endif
 
-   user_disable_single_step(current);
return 0;
 }
 

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/2] uprobes/powerpc: Make use of generic routines to enable single step

2012-11-26 Thread Oleg Nesterov
On 11/26, Suzuki K. Poulose wrote:

 @@ -121,8 +125,11 @@ int arch_uprobe_post_xol(struct arch_uprobe *auprobe, 
 struct pt_regs *regs)
* to be executed.
*/
   regs-nip = utask-vaddr + MAX_UINSN_BYTES;
 + regs-msr = utask-autask.saved_msr;
 +#ifdef CONFIG_PPC_ADV_DEBUG_REGS
 + mtspr(SPRN_DBCR0, utask-autask.saved_dbcr);
 +#endif
  
 - user_disable_single_step(current);

Don't we need the same change in arch_uprobe_abort_xol() ?

Oleg.

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 2/2] uprobes/powerpc: Make use of generic routines to enable single step

2012-11-26 Thread Suzuki K. Poulose

On 11/26/2012 10:31 PM, Oleg Nesterov wrote:

On 11/26, Suzuki K. Poulose wrote:


@@ -121,8 +125,11 @@ int arch_uprobe_post_xol(struct arch_uprobe *auprobe, 
struct pt_regs *regs)
 * to be executed.
 */
regs-nip = utask-vaddr + MAX_UINSN_BYTES;
+   regs-msr = utask-autask.saved_msr;
+#ifdef CONFIG_PPC_ADV_DEBUG_REGS
+   mtspr(SPRN_DBCR0, utask-autask.saved_dbcr);
+#endif

-   user_disable_single_step(current);


Don't we need the same change in arch_uprobe_abort_xol() ?

Yes, we do. Thanks for catching that. I will fix it.

Thanks for the review.

Suzuki

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/