powerpc/watchpoint: Introduce macros for watchpoint length
authorRavi Bangoria <ravi.bangoria@linux.ibm.com>
Thu, 17 Oct 2019 09:31:58 +0000 (15:01 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 13 Nov 2019 05:58:02 +0000 (16:58 +1100)
We are hadrcoding length everywhere in the watchpoint code. Introduce
macros for the length and use them.

Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20191017093204.7511-2-ravi.bangoria@linux.ibm.com
arch/powerpc/include/asm/hw_breakpoint.h
arch/powerpc/kernel/hw_breakpoint.c
arch/powerpc/kernel/ptrace.c
arch/powerpc/xmon/xmon.c

index 67e2da1..4a887e8 100644 (file)
@@ -33,6 +33,9 @@ struct arch_hw_breakpoint {
 #define HW_BRK_TYPE_PRIV_ALL   (HW_BRK_TYPE_USER | HW_BRK_TYPE_KERNEL | \
                                 HW_BRK_TYPE_HYP)
 
+#define DABR_MAX_LEN   8
+#define DAWR_MAX_LEN   512
+
 #ifdef CONFIG_HAVE_HW_BREAKPOINT
 #include <linux/kdebug.h>
 #include <asm/reg.h>
index 1007ec3..677041c 100644 (file)
@@ -163,9 +163,9 @@ int hw_breakpoint_arch_parse(struct perf_event *bp,
         */
        if (!ppc_breakpoint_available())
                return -ENODEV;
-       length_max = 8; /* DABR */
+       length_max = DABR_MAX_LEN; /* DABR */
        if (dawr_enabled()) {
-               length_max = 512 ; /* 64 doublewords */
+               length_max = DAWR_MAX_LEN; /* 64 doublewords */
                /* DAWR region can't cross 512 boundary */
                if ((attr->bp_addr >> 9) !=
                    ((attr->bp_addr + attr->bp_len - 1) >> 9))
index 76724a0..eba39a5 100644 (file)
@@ -2425,7 +2425,7 @@ static int ptrace_set_debugreg(struct task_struct *task, unsigned long addr,
                return -EIO;
        hw_brk.address = data & (~HW_BRK_TYPE_DABR);
        hw_brk.type = (data & HW_BRK_TYPE_DABR) | HW_BRK_TYPE_PRIV_ALL;
-       hw_brk.len = 8;
+       hw_brk.len = DABR_MAX_LEN;
        set_bp = (data) && (hw_brk.type & HW_BRK_TYPE_RDWR);
 #ifdef CONFIG_HAVE_HW_BREAKPOINT
        bp = thread->ptrace_bps[0];
@@ -2456,7 +2456,7 @@ static int ptrace_set_debugreg(struct task_struct *task, unsigned long addr,
        /* Create a new breakpoint request if one doesn't exist already */
        hw_breakpoint_init(&attr);
        attr.bp_addr = hw_brk.address;
-       attr.bp_len = 8;
+       attr.bp_len = DABR_MAX_LEN;
        arch_bp_generic_fields(hw_brk.type,
                               &attr.bp_type);
 
@@ -2882,7 +2882,7 @@ static long ppc_set_hwdebug(struct task_struct *child,
 
        brk.address = bp_info->addr & ~7UL;
        brk.type = HW_BRK_TYPE_TRANSLATE;
-       brk.len = 8;
+       brk.len = DABR_MAX_LEN;
        if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_READ)
                brk.type |= HW_BRK_TYPE_READ;
        if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_WRITE)
index 0a438b5..a705604 100644 (file)
@@ -933,7 +933,7 @@ static void insert_cpu_bpts(void)
        if (dabr.enabled) {
                brk.address = dabr.address;
                brk.type = (dabr.enabled & HW_BRK_TYPE_DABR) | HW_BRK_TYPE_PRIV_ALL;
-               brk.len = 8;
+               brk.len = DABR_MAX_LEN;
                __set_breakpoint(&brk);
        }