powerpc/watchpoint: Provide DAWR number to __set_breakpoint
Introduce new parameter 'nr' to __set_breakpoint() which indicates which DAWR should be programed. Also convert current_brk variable to an array. Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Reviewed-by: Michael Neuling <mikey@neuling.org> Link: https://lore.kernel.org/r/20200514111741.97993-7-ravi.bangoria@linux.ibm.com
This commit is contained in:

committed by
Michael Ellerman

parent
a18b834625
commit
4a8a9379f2
@@ -637,7 +637,7 @@ void do_break (struct pt_regs *regs, unsigned long address,
|
||||
}
|
||||
#endif /* CONFIG_PPC_ADV_DEBUG_REGS */
|
||||
|
||||
static DEFINE_PER_CPU(struct arch_hw_breakpoint, current_brk);
|
||||
static DEFINE_PER_CPU(struct arch_hw_breakpoint, current_brk[HBP_NUM_MAX]);
|
||||
|
||||
#ifdef CONFIG_PPC_ADV_DEBUG_REGS
|
||||
/*
|
||||
@@ -714,7 +714,7 @@ EXPORT_SYMBOL_GPL(switch_booke_debug_regs);
|
||||
static void set_breakpoint(struct arch_hw_breakpoint *brk)
|
||||
{
|
||||
preempt_disable();
|
||||
__set_breakpoint(brk);
|
||||
__set_breakpoint(0, brk);
|
||||
preempt_enable();
|
||||
}
|
||||
|
||||
@@ -800,13 +800,13 @@ static inline int set_breakpoint_8xx(struct arch_hw_breakpoint *brk)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void __set_breakpoint(struct arch_hw_breakpoint *brk)
|
||||
void __set_breakpoint(int nr, struct arch_hw_breakpoint *brk)
|
||||
{
|
||||
memcpy(this_cpu_ptr(¤t_brk), brk, sizeof(*brk));
|
||||
memcpy(this_cpu_ptr(¤t_brk[nr]), brk, sizeof(*brk));
|
||||
|
||||
if (dawr_enabled())
|
||||
// Power8 or later
|
||||
set_dawr(0, brk);
|
||||
set_dawr(nr, brk);
|
||||
else if (IS_ENABLED(CONFIG_PPC_8xx))
|
||||
set_breakpoint_8xx(brk);
|
||||
else if (!cpu_has_feature(CPU_FTR_ARCH_207S))
|
||||
@@ -1174,8 +1174,8 @@ struct task_struct *__switch_to(struct task_struct *prev,
|
||||
* schedule DABR
|
||||
*/
|
||||
#ifndef CONFIG_HAVE_HW_BREAKPOINT
|
||||
if (unlikely(!hw_brk_match(this_cpu_ptr(¤t_brk), &new->thread.hw_brk)))
|
||||
__set_breakpoint(&new->thread.hw_brk);
|
||||
if (unlikely(!hw_brk_match(this_cpu_ptr(¤t_brk[0]), &new->thread.hw_brk)))
|
||||
__set_breakpoint(0, &new->thread.hw_brk);
|
||||
#endif /* CONFIG_HAVE_HW_BREAKPOINT */
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user