mirror of https://gitee.com/openkylin/linux.git
powerpc/watchpoint: Introduce macros for watchpoint length
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
This commit is contained in:
parent
4e706af3cd
commit
b811be615c
|
@ -33,6 +33,9 @@ struct arch_hw_breakpoint {
|
||||||
#define HW_BRK_TYPE_PRIV_ALL (HW_BRK_TYPE_USER | HW_BRK_TYPE_KERNEL | \
|
#define HW_BRK_TYPE_PRIV_ALL (HW_BRK_TYPE_USER | HW_BRK_TYPE_KERNEL | \
|
||||||
HW_BRK_TYPE_HYP)
|
HW_BRK_TYPE_HYP)
|
||||||
|
|
||||||
|
#define DABR_MAX_LEN 8
|
||||||
|
#define DAWR_MAX_LEN 512
|
||||||
|
|
||||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||||
#include <linux/kdebug.h>
|
#include <linux/kdebug.h>
|
||||||
#include <asm/reg.h>
|
#include <asm/reg.h>
|
||||||
|
|
|
@ -163,9 +163,9 @@ int hw_breakpoint_arch_parse(struct perf_event *bp,
|
||||||
*/
|
*/
|
||||||
if (!ppc_breakpoint_available())
|
if (!ppc_breakpoint_available())
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
length_max = 8; /* DABR */
|
length_max = DABR_MAX_LEN; /* DABR */
|
||||||
if (dawr_enabled()) {
|
if (dawr_enabled()) {
|
||||||
length_max = 512 ; /* 64 doublewords */
|
length_max = DAWR_MAX_LEN; /* 64 doublewords */
|
||||||
/* DAWR region can't cross 512 boundary */
|
/* DAWR region can't cross 512 boundary */
|
||||||
if ((attr->bp_addr >> 9) !=
|
if ((attr->bp_addr >> 9) !=
|
||||||
((attr->bp_addr + attr->bp_len - 1) >> 9))
|
((attr->bp_addr + attr->bp_len - 1) >> 9))
|
||||||
|
|
|
@ -2425,7 +2425,7 @@ static int ptrace_set_debugreg(struct task_struct *task, unsigned long addr,
|
||||||
return -EIO;
|
return -EIO;
|
||||||
hw_brk.address = data & (~HW_BRK_TYPE_DABR);
|
hw_brk.address = data & (~HW_BRK_TYPE_DABR);
|
||||||
hw_brk.type = (data & HW_BRK_TYPE_DABR) | HW_BRK_TYPE_PRIV_ALL;
|
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);
|
set_bp = (data) && (hw_brk.type & HW_BRK_TYPE_RDWR);
|
||||||
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
#ifdef CONFIG_HAVE_HW_BREAKPOINT
|
||||||
bp = thread->ptrace_bps[0];
|
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 */
|
/* Create a new breakpoint request if one doesn't exist already */
|
||||||
hw_breakpoint_init(&attr);
|
hw_breakpoint_init(&attr);
|
||||||
attr.bp_addr = hw_brk.address;
|
attr.bp_addr = hw_brk.address;
|
||||||
attr.bp_len = 8;
|
attr.bp_len = DABR_MAX_LEN;
|
||||||
arch_bp_generic_fields(hw_brk.type,
|
arch_bp_generic_fields(hw_brk.type,
|
||||||
&attr.bp_type);
|
&attr.bp_type);
|
||||||
|
|
||||||
|
@ -2882,7 +2882,7 @@ static long ppc_set_hwdebug(struct task_struct *child,
|
||||||
|
|
||||||
brk.address = bp_info->addr & ~7UL;
|
brk.address = bp_info->addr & ~7UL;
|
||||||
brk.type = HW_BRK_TYPE_TRANSLATE;
|
brk.type = HW_BRK_TYPE_TRANSLATE;
|
||||||
brk.len = 8;
|
brk.len = DABR_MAX_LEN;
|
||||||
if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_READ)
|
if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_READ)
|
||||||
brk.type |= HW_BRK_TYPE_READ;
|
brk.type |= HW_BRK_TYPE_READ;
|
||||||
if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_WRITE)
|
if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_WRITE)
|
||||||
|
|
|
@ -933,7 +933,7 @@ static void insert_cpu_bpts(void)
|
||||||
if (dabr.enabled) {
|
if (dabr.enabled) {
|
||||||
brk.address = dabr.address;
|
brk.address = dabr.address;
|
||||||
brk.type = (dabr.enabled & HW_BRK_TYPE_DABR) | HW_BRK_TYPE_PRIV_ALL;
|
brk.type = (dabr.enabled & HW_BRK_TYPE_DABR) | HW_BRK_TYPE_PRIV_ALL;
|
||||||
brk.len = 8;
|
brk.len = DABR_MAX_LEN;
|
||||||
__set_breakpoint(&brk);
|
__set_breakpoint(&brk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue