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

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE2360d LANDED

Landed in mainline as e08658a657f9 on 2020-02-24.

4 messages, 3 authors, 2020-02-27 · open the first message on its own page

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

From: Ravi Bangoria <hidden>
Date: 2020-02-22 08:21:40

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 <mpe@ellerman.id.au>
Signed-off-by: Ravi Bangoria <redacted>
---
 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

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

From: Christophe Leroy <hidden>
Date: 2020-02-22 11:26:51


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 <redacted>
quoted hunk
Reported-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Ravi Bangoria <redacted>
---
  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'

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

From: Ravi Bangoria <hidden>
Date: 2020-02-22 13:17:27


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

On 02/22/2020 08:20 AM, Ravi Bangoria wrote:
quoted
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 <redacted>
No worries. Thanks for the review :)

Ravi

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

From: Michael Ellerman <hidden>
Date: 2020-02-27 12:31:38

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 <mpe@ellerman.id.au>
Signed-off-by: Ravi Bangoria <redacted>
Applied to powerpc fixes, thanks.

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

cheers
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help