All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
To: mpe@ellerman.id.au, mikey@neuling.org
Cc: apopple@linux.ibm.com, paulus@samba.org, npiggin@gmail.com,
	christophe.leroy@c-s.fr, naveen.n.rao@linux.vnet.ibm.com,
	peterz@infradead.org, jolsa@kernel.org, oleg@redhat.com,
	fweisbec@gmail.com, mingo@kernel.org,
	linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
	ravi.bangoria@linux.ibm.com
Subject: [PATCH v2 12/16] powerpc/watchpoint: Use builtin ALIGN*() macros
Date: Wed,  1 Apr 2020 11:43:05 +0530	[thread overview]
Message-ID: <20200401061309.92442-13-ravi.bangoria@linux.ibm.com> (raw)
In-Reply-To: <20200401061309.92442-1-ravi.bangoria@linux.ibm.com>

Currently we calculate hw aligned start and end addresses manually.
Replace them with builtin ALIGN_DOWN() and ALIGN() macros.

Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
---
 arch/powerpc/include/asm/hw_breakpoint.h  | 5 +++--
 arch/powerpc/kernel/hw_breakpoint.c       | 6 +++---
 arch/powerpc/kernel/process.c             | 4 ++--
 arch/powerpc/kernel/ptrace/ptrace-noadv.c | 2 +-
 4 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/include/asm/hw_breakpoint.h b/arch/powerpc/include/asm/hw_breakpoint.h
index fae33c729ba9..abc4603c0efe 100644
--- a/arch/powerpc/include/asm/hw_breakpoint.h
+++ b/arch/powerpc/include/asm/hw_breakpoint.h
@@ -34,10 +34,11 @@ struct arch_hw_breakpoint {
 #define HW_BRK_TYPE_PRIV_ALL	(HW_BRK_TYPE_USER | HW_BRK_TYPE_KERNEL | \
 				 HW_BRK_TYPE_HYP)
 
+/* Minimum granularity */
 #ifdef CONFIG_PPC_8xx
-#define HW_BREAKPOINT_ALIGN 0x3
+#define HW_BREAKPOINT_SIZE  0x4
 #else
-#define HW_BREAKPOINT_ALIGN 0x7
+#define HW_BREAKPOINT_SIZE  0x8
 #endif
 
 #define DABR_MAX_LEN	8
diff --git a/arch/powerpc/kernel/hw_breakpoint.c b/arch/powerpc/kernel/hw_breakpoint.c
index 8d3f7d87d790..71274fbbac38 100644
--- a/arch/powerpc/kernel/hw_breakpoint.c
+++ b/arch/powerpc/kernel/hw_breakpoint.c
@@ -145,7 +145,7 @@ int arch_bp_generic_fields(int type, int *gen_bp_type)
  *    <---8 bytes--->
  *
  * In this case, we should configure hw as:
- *   start_addr = address & ~HW_BREAKPOINT_ALIGN
+ *   start_addr = address & ~(HW_BREAKPOINT_SIZE - 1)
  *   len = 16 bytes
  *
  * @start_addr and @end_addr are inclusive.
@@ -156,8 +156,8 @@ static int hw_breakpoint_validate_len(struct arch_hw_breakpoint *hw)
 	u16 hw_len;
 	unsigned long start_addr, end_addr;
 
-	start_addr = hw->address & ~HW_BREAKPOINT_ALIGN;
-	end_addr = (hw->address + hw->len - 1) | HW_BREAKPOINT_ALIGN;
+	start_addr = ALIGN_DOWN(hw->address, HW_BREAKPOINT_SIZE);
+	end_addr = ALIGN(hw->address + hw->len, HW_BREAKPOINT_SIZE) - 1;
 	hw_len = end_addr - start_addr + 1;
 
 	if (dawr_enabled()) {
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 73c0800f0bcf..cbd6e9b79401 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -794,8 +794,8 @@ static inline int set_breakpoint_8xx(struct arch_hw_breakpoint *brk)
 	unsigned long lctrl1 = LCTRL1_CTE_GT | LCTRL1_CTF_LT | LCTRL1_CRWE_RW |
 			       LCTRL1_CRWF_RW;
 	unsigned long lctrl2 = LCTRL2_LW0EN | LCTRL2_LW0LADC | LCTRL2_SLW0EN;
-	unsigned long start_addr = brk->address & ~HW_BREAKPOINT_ALIGN;
-	unsigned long end_addr = (brk->address + brk->len - 1) | HW_BREAKPOINT_ALIGN;
+	unsigned long start_addr = ALIGN_DOWN(brk->address, HW_BREAKPOINT_SIZE);
+	unsigned long end_addr = ALIGN(brk->address + brk->len, HW_BREAKPOINT_SIZE) - 1;
 
 	if (start_addr == 0)
 		lctrl2 |= LCTRL2_LW0LA_F;
diff --git a/arch/powerpc/kernel/ptrace/ptrace-noadv.c b/arch/powerpc/kernel/ptrace/ptrace-noadv.c
index 08cb8c1b504c..697c7e4b5877 100644
--- a/arch/powerpc/kernel/ptrace/ptrace-noadv.c
+++ b/arch/powerpc/kernel/ptrace/ptrace-noadv.c
@@ -216,7 +216,7 @@ long ppc_set_hwdebug(struct task_struct *child, struct ppc_hw_breakpoint *bp_inf
 	if ((unsigned long)bp_info->addr >= TASK_SIZE)
 		return -EIO;
 
-	brk.address = bp_info->addr & ~HW_BREAKPOINT_ALIGN;
+	brk.address = ALIGN_DOWN(bp_info->addr, HW_BREAKPOINT_SIZE);
 	brk.type = HW_BRK_TYPE_TRANSLATE;
 	brk.len = DABR_MAX_LEN;
 	if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_READ)
-- 
2.21.1


WARNING: multiple messages have this Message-ID (diff)
From: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
To: mpe@ellerman.id.au, mikey@neuling.org
Cc: apopple@linux.ibm.com, ravi.bangoria@linux.ibm.com,
	peterz@infradead.org, fweisbec@gmail.com, oleg@redhat.com,
	npiggin@gmail.com, linux-kernel@vger.kernel.org,
	paulus@samba.org, jolsa@kernel.org,
	naveen.n.rao@linux.vnet.ibm.com, linuxppc-dev@lists.ozlabs.org,
	mingo@kernel.org
Subject: [PATCH v2 12/16] powerpc/watchpoint: Use builtin ALIGN*() macros
Date: Wed,  1 Apr 2020 11:43:05 +0530	[thread overview]
Message-ID: <20200401061309.92442-13-ravi.bangoria@linux.ibm.com> (raw)
In-Reply-To: <20200401061309.92442-1-ravi.bangoria@linux.ibm.com>

Currently we calculate hw aligned start and end addresses manually.
Replace them with builtin ALIGN_DOWN() and ALIGN() macros.

Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
---
 arch/powerpc/include/asm/hw_breakpoint.h  | 5 +++--
 arch/powerpc/kernel/hw_breakpoint.c       | 6 +++---
 arch/powerpc/kernel/process.c             | 4 ++--
 arch/powerpc/kernel/ptrace/ptrace-noadv.c | 2 +-
 4 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/include/asm/hw_breakpoint.h b/arch/powerpc/include/asm/hw_breakpoint.h
index fae33c729ba9..abc4603c0efe 100644
--- a/arch/powerpc/include/asm/hw_breakpoint.h
+++ b/arch/powerpc/include/asm/hw_breakpoint.h
@@ -34,10 +34,11 @@ struct arch_hw_breakpoint {
 #define HW_BRK_TYPE_PRIV_ALL	(HW_BRK_TYPE_USER | HW_BRK_TYPE_KERNEL | \
 				 HW_BRK_TYPE_HYP)
 
+/* Minimum granularity */
 #ifdef CONFIG_PPC_8xx
-#define HW_BREAKPOINT_ALIGN 0x3
+#define HW_BREAKPOINT_SIZE  0x4
 #else
-#define HW_BREAKPOINT_ALIGN 0x7
+#define HW_BREAKPOINT_SIZE  0x8
 #endif
 
 #define DABR_MAX_LEN	8
diff --git a/arch/powerpc/kernel/hw_breakpoint.c b/arch/powerpc/kernel/hw_breakpoint.c
index 8d3f7d87d790..71274fbbac38 100644
--- a/arch/powerpc/kernel/hw_breakpoint.c
+++ b/arch/powerpc/kernel/hw_breakpoint.c
@@ -145,7 +145,7 @@ int arch_bp_generic_fields(int type, int *gen_bp_type)
  *    <---8 bytes--->
  *
  * In this case, we should configure hw as:
- *   start_addr = address & ~HW_BREAKPOINT_ALIGN
+ *   start_addr = address & ~(HW_BREAKPOINT_SIZE - 1)
  *   len = 16 bytes
  *
  * @start_addr and @end_addr are inclusive.
@@ -156,8 +156,8 @@ static int hw_breakpoint_validate_len(struct arch_hw_breakpoint *hw)
 	u16 hw_len;
 	unsigned long start_addr, end_addr;
 
-	start_addr = hw->address & ~HW_BREAKPOINT_ALIGN;
-	end_addr = (hw->address + hw->len - 1) | HW_BREAKPOINT_ALIGN;
+	start_addr = ALIGN_DOWN(hw->address, HW_BREAKPOINT_SIZE);
+	end_addr = ALIGN(hw->address + hw->len, HW_BREAKPOINT_SIZE) - 1;
 	hw_len = end_addr - start_addr + 1;
 
 	if (dawr_enabled()) {
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 73c0800f0bcf..cbd6e9b79401 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -794,8 +794,8 @@ static inline int set_breakpoint_8xx(struct arch_hw_breakpoint *brk)
 	unsigned long lctrl1 = LCTRL1_CTE_GT | LCTRL1_CTF_LT | LCTRL1_CRWE_RW |
 			       LCTRL1_CRWF_RW;
 	unsigned long lctrl2 = LCTRL2_LW0EN | LCTRL2_LW0LADC | LCTRL2_SLW0EN;
-	unsigned long start_addr = brk->address & ~HW_BREAKPOINT_ALIGN;
-	unsigned long end_addr = (brk->address + brk->len - 1) | HW_BREAKPOINT_ALIGN;
+	unsigned long start_addr = ALIGN_DOWN(brk->address, HW_BREAKPOINT_SIZE);
+	unsigned long end_addr = ALIGN(brk->address + brk->len, HW_BREAKPOINT_SIZE) - 1;
 
 	if (start_addr == 0)
 		lctrl2 |= LCTRL2_LW0LA_F;
diff --git a/arch/powerpc/kernel/ptrace/ptrace-noadv.c b/arch/powerpc/kernel/ptrace/ptrace-noadv.c
index 08cb8c1b504c..697c7e4b5877 100644
--- a/arch/powerpc/kernel/ptrace/ptrace-noadv.c
+++ b/arch/powerpc/kernel/ptrace/ptrace-noadv.c
@@ -216,7 +216,7 @@ long ppc_set_hwdebug(struct task_struct *child, struct ppc_hw_breakpoint *bp_inf
 	if ((unsigned long)bp_info->addr >= TASK_SIZE)
 		return -EIO;
 
-	brk.address = bp_info->addr & ~HW_BREAKPOINT_ALIGN;
+	brk.address = ALIGN_DOWN(bp_info->addr, HW_BREAKPOINT_SIZE);
 	brk.type = HW_BRK_TYPE_TRANSLATE;
 	brk.len = DABR_MAX_LEN;
 	if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_READ)
-- 
2.21.1


  parent reply	other threads:[~2020-04-01  6:14 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-01  6:12 [PATCH v2 00/16] powerpc/watchpoint: Preparation for more than one watchpoint Ravi Bangoria
2020-04-01  6:12 ` Ravi Bangoria
2020-04-01  6:12 ` [PATCH v2 01/16] powerpc/watchpoint: Rename current DAWR macros Ravi Bangoria
2020-04-01  6:12   ` Ravi Bangoria
2020-04-01  6:12 ` [PATCH v2 02/16] powerpc/watchpoint: Add SPRN macros for second DAWR Ravi Bangoria
2020-04-01  6:12   ` Ravi Bangoria
2020-04-01  6:12 ` [PATCH v2 03/16] powerpc/watchpoint: Introduce function to get nr watchpoints dynamically Ravi Bangoria
2020-04-01  6:12   ` Ravi Bangoria
2020-04-01  6:29   ` Christophe Leroy
2020-04-01  6:29     ` Christophe Leroy
2020-04-01  6:50     ` Ravi Bangoria
2020-04-01  6:50       ` Ravi Bangoria
2020-04-01  7:05       ` Christophe Leroy
2020-04-01  7:05         ` Christophe Leroy
2020-04-01  6:12 ` [PATCH v2 04/16] powerpc/watchpoint/ptrace: Return actual num of available watchpoints Ravi Bangoria
2020-04-01  6:12   ` Ravi Bangoria
2020-04-01  6:12 ` [PATCH v2 05/16] powerpc/watchpoint: Provide DAWR number to set_dawr Ravi Bangoria
2020-04-01  6:12   ` Ravi Bangoria
2020-04-01  7:03   ` Christophe Leroy
2020-04-01  7:03     ` Christophe Leroy
2020-04-01  6:12 ` [PATCH v2 06/16] powerpc/watchpoint: Provide DAWR number to __set_breakpoint Ravi Bangoria
2020-04-01  6:12   ` Ravi Bangoria
2020-04-01  7:03   ` Christophe Leroy
2020-04-01  7:03     ` Christophe Leroy
2020-04-01  8:57     ` Ravi Bangoria
2020-04-01  8:57       ` Ravi Bangoria
2020-04-01  9:11       ` Christophe Leroy
2020-04-01  9:11         ` Christophe Leroy
2020-04-01  9:44         ` Christophe Leroy
2020-04-01  9:44           ` Christophe Leroy
2020-04-01  6:13 ` [PATCH v2 07/16] powerpc/watchpoint: Get watchpoint count dynamically while disabling them Ravi Bangoria
2020-04-01  6:13   ` Ravi Bangoria
2020-04-01  6:32   ` Christophe Leroy
2020-04-01  6:32     ` Christophe Leroy
2020-04-01  9:19     ` Ravi Bangoria
2020-04-01  9:19       ` Ravi Bangoria
2020-04-01  6:13 ` [PATCH v2 08/16] powerpc/watchpoint: Disable all available watchpoints when !dawr_force_enable Ravi Bangoria
2020-04-01  6:13   ` Ravi Bangoria
2020-04-01  6:33   ` Christophe Leroy
2020-04-01  6:33     ` Christophe Leroy
2020-04-01  9:00     ` Ravi Bangoria
2020-04-01  9:00       ` Ravi Bangoria
2020-04-01  6:13 ` [PATCH v2 09/16] powerpc/watchpoint: Convert thread_struct->hw_brk to an array Ravi Bangoria
2020-04-01  6:13   ` Ravi Bangoria
2020-04-01  6:43   ` Christophe Leroy
2020-04-01  6:43     ` Christophe Leroy
2020-04-01  9:06     ` Ravi Bangoria
2020-04-01  9:06       ` Ravi Bangoria
2020-04-01  6:13 ` [PATCH v2 10/16] powerpc/watchpoint: Use loop for thread_struct->ptrace_bps Ravi Bangoria
2020-04-01  6:13   ` Ravi Bangoria
2020-04-01  6:13 ` [PATCH v2 11/16] powerpc/watchpoint: Introduce is_ptrace_bp() function Ravi Bangoria
2020-04-01  6:13   ` Ravi Bangoria
2020-04-01  6:13 ` Ravi Bangoria [this message]
2020-04-01  6:13   ` [PATCH v2 12/16] powerpc/watchpoint: Use builtin ALIGN*() macros Ravi Bangoria
2020-04-01  6:13 ` [PATCH v2 13/16] powerpc/watchpoint: Prepare handler to handle more than one watcnhpoint Ravi Bangoria
2020-04-01  6:13   ` Ravi Bangoria
2020-04-01  6:50   ` Christophe Leroy
2020-04-01  6:50     ` Christophe Leroy
2020-04-01  9:13     ` Ravi Bangoria
2020-04-01  9:13       ` Ravi Bangoria
2020-04-01  9:20       ` Christophe Leroy
2020-04-01  9:20         ` Christophe Leroy
2020-04-01  9:23         ` Ravi Bangoria
2020-04-01  9:23           ` Ravi Bangoria
2020-04-01  6:13 ` [PATCH v2 14/16] powerpc/watchpoint: Don't allow concurrent perf and ptrace events Ravi Bangoria
2020-04-01  6:13   ` Ravi Bangoria
2020-04-01  6:52   ` Christophe Leroy
2020-04-01  6:52     ` Christophe Leroy
2020-04-01  6:13 ` [PATCH v2 15/16] powerpc/watchpoint/xmon: Don't allow breakpoint overwriting Ravi Bangoria
2020-04-01  6:13   ` Ravi Bangoria
2020-04-01  6:13 ` [PATCH v2 16/16] powerpc/watchpoint/xmon: Support 2nd dawr Ravi Bangoria
2020-04-01  6:13   ` Ravi Bangoria

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200401061309.92442-13-ravi.bangoria@linux.ibm.com \
    --to=ravi.bangoria@linux.ibm.com \
    --cc=apopple@linux.ibm.com \
    --cc=christophe.leroy@c-s.fr \
    --cc=fweisbec@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mikey@neuling.org \
    --cc=mingo@kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=naveen.n.rao@linux.vnet.ibm.com \
    --cc=npiggin@gmail.com \
    --cc=oleg@redhat.com \
    --cc=paulus@samba.org \
    --cc=peterz@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.