ptrace/powerpc: Don't flush_ptrace_hw_breakpoint() on fork()
authorOleg Nesterov <oleg@redhat.com>
Sun, 21 Apr 2013 06:47:59 +0000 (06:47 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Tue, 23 Apr 2013 06:05:06 +0000 (16:05 +1000)
arch_dup_task_struct() does flush_ptrace_hw_breakpoint(src), this
destroys the parent's breakpoints for no reason. We should clear
child->thread.ptrace_bps[] copied by dup_task_struct() instead.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Michael Neuling <mikey@neuling.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/process.c

index 59dd545fdde188761e140c2f6969b9b9e348662b..834805cf13cb08edaabadcbbb14bfc45aaa0aea1 100644 (file)
@@ -910,10 +910,6 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
        flush_altivec_to_thread(src);
        flush_vsx_to_thread(src);
        flush_spe_to_thread(src);
-#ifdef CONFIG_HAVE_HW_BREAKPOINT
-       flush_ptrace_hw_breakpoint(src);
-#endif /* CONFIG_HAVE_HW_BREAKPOINT */
-
        *dst = *src;
        return 0;
 }
@@ -984,6 +980,10 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
        p->thread.ksp_limit = (unsigned long)task_stack_page(p) +
                                _ALIGN_UP(sizeof(struct thread_info), 16);
 
+#ifdef CONFIG_HAVE_HW_BREAKPOINT
+       p->thread.ptrace_bps[0] = NULL;
+#endif
+
 #ifdef CONFIG_PPC_STD_MMU_64
        if (mmu_has_feature(MMU_FTR_SLB)) {
                unsigned long sp_vsid;