Re: [PATCH] powerpc/watchpoint: Don't call dar_within_range() for Book3S

2020-02-27 Thread Michael Ellerman
On Sat, 2020-02-22 at 08:20:49 UTC, 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.")
> Reported-by: Michael Ellerman 
> Signed-off-by: Ravi Bangoria 

Applied to powerpc fixes, thanks.

https://git.kernel.org/powerpc/c/e08658a657f974590809290c62e889f0fd420200

cheers


Re: [PATCH] powerpc/watchpoint: Don't call dar_within_range() for Book3S

2020-02-22 Thread Ravi Bangoria




On 2/22/20 4:56 PM, Christophe Leroy wrote:



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 


No worries. Thanks for the review :)

Ravi



Re: [PATCH] powerpc/watchpoint: Don't call dar_within_range() for Book3S

2020-02-22 Thread Christophe Leroy




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 


Reported-by: Michael Ellerman 
Signed-off-by: Ravi Bangoria 
---
  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'



[PATCH] powerpc/watchpoint: Don't call dar_within_range() for Book3S

2020-02-22 Thread Ravi Bangoria
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.")
Reported-by: Michael Ellerman 
Signed-off-by: Ravi Bangoria 
---
 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'
-- 
2.21.1