Re: [PATCH 2/2] uprobes/powerpc: Make use of generic routines to enable single step
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
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
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
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
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
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/