Messages in this thread | | | Subject | Re: [PATCH] powerpc/watchpoint: Don't call dar_within_range() for Book3S | From | Christophe Leroy <> | Date | Sat, 22 Feb 2020 11:26:08 +0000 |
| |
On 02/22/2020 08:20 AM, Ravi Bangoria wrote: > DAR is set to the first byte of overlap between actual access and > watched range at DSI on Book3S processor. But actual access range > might or might not be within user asked range. So for Book3S, it > must not call dar_within_range(). > > This revert portion of commit 39413ae00967 ("powerpc/hw_breakpoints: > Rewrite 8xx breakpoints to allow any address range size."). > > Before patch: > # ./tools/testing/selftests/powerpc/ptrace/perf-hwbreak > ... > TESTED: No overlap > FAILED: Partial overlap: 0 != 2 > TESTED: Partial overlap > TESTED: No overlap > FAILED: Full overlap: 0 != 2 > failure: perf_hwbreak > > After patch: > TESTED: No overlap > TESTED: Partial overlap > TESTED: Partial overlap > TESTED: No overlap > TESTED: Full overlap > success: perf_hwbreak > > Fixes: 39413ae00967 ("powerpc/hw_breakpoints: Rewrite 8xx breakpoints to allow any address range size.")
Oh, this seems to have been introduced by 27985b2a640e ("powerpc/watchpoint: Don't ignore extraneous exceptions blindly").
I must have lost it through a rebase as we were doing our series approximately at the same time, sorry for that.
Reviewed-by: Christophe Leroy <christophe.leroy@c-s.fr>
> Reported-by: Michael Ellerman <mpe@ellerman.id.au> > Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com> > --- > arch/powerpc/kernel/hw_breakpoint.c | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/arch/powerpc/kernel/hw_breakpoint.c b/arch/powerpc/kernel/hw_breakpoint.c > index 2462cd7c565c..d0854320bb50 100644 > --- a/arch/powerpc/kernel/hw_breakpoint.c > +++ b/arch/powerpc/kernel/hw_breakpoint.c > @@ -331,11 +331,13 @@ int hw_breakpoint_handler(struct die_args *args) > } > > info->type &= ~HW_BRK_TYPE_EXTRANEOUS_IRQ; > - if (!dar_within_range(regs->dar, info)) > - info->type |= HW_BRK_TYPE_EXTRANEOUS_IRQ; > - > - if (!IS_ENABLED(CONFIG_PPC_8xx) && !stepping_handler(regs, bp, info)) > - goto out; > + if (IS_ENABLED(CONFIG_PPC_8xx)) { > + if (!dar_within_range(regs->dar, info)) > + info->type |= HW_BRK_TYPE_EXTRANEOUS_IRQ; > + } else { > + if (!stepping_handler(regs, bp, info)) > + goto out; > + } > > /* > * As a policy, the callback is invoked in a 'trigger-after-execute' >
| |