arm64: Allow hw watchpoint of length 3,5,6 and 7
Since, arm64 can support all offset within a double word limit. Therefore, now support other lengths within that range as well. Signed-off-by: Pratyush Anand <panand@redhat.com> Signed-off-by: Will Deacon <will.deacon@arm.com>
This commit is contained in:
parent
fdfeff0f9e
commit
0ddb8e0b78
|
@ -77,7 +77,11 @@ static inline void decode_ctrl_reg(u32 reg,
|
||||||
/* Lengths */
|
/* Lengths */
|
||||||
#define ARM_BREAKPOINT_LEN_1 0x1
|
#define ARM_BREAKPOINT_LEN_1 0x1
|
||||||
#define ARM_BREAKPOINT_LEN_2 0x3
|
#define ARM_BREAKPOINT_LEN_2 0x3
|
||||||
|
#define ARM_BREAKPOINT_LEN_3 0x7
|
||||||
#define ARM_BREAKPOINT_LEN_4 0xf
|
#define ARM_BREAKPOINT_LEN_4 0xf
|
||||||
|
#define ARM_BREAKPOINT_LEN_5 0x1f
|
||||||
|
#define ARM_BREAKPOINT_LEN_6 0x3f
|
||||||
|
#define ARM_BREAKPOINT_LEN_7 0x7f
|
||||||
#define ARM_BREAKPOINT_LEN_8 0xff
|
#define ARM_BREAKPOINT_LEN_8 0xff
|
||||||
|
|
||||||
/* Kernel stepping */
|
/* Kernel stepping */
|
||||||
|
|
|
@ -317,9 +317,21 @@ static int get_hbp_len(u8 hbp_len)
|
||||||
case ARM_BREAKPOINT_LEN_2:
|
case ARM_BREAKPOINT_LEN_2:
|
||||||
len_in_bytes = 2;
|
len_in_bytes = 2;
|
||||||
break;
|
break;
|
||||||
|
case ARM_BREAKPOINT_LEN_3:
|
||||||
|
len_in_bytes = 3;
|
||||||
|
break;
|
||||||
case ARM_BREAKPOINT_LEN_4:
|
case ARM_BREAKPOINT_LEN_4:
|
||||||
len_in_bytes = 4;
|
len_in_bytes = 4;
|
||||||
break;
|
break;
|
||||||
|
case ARM_BREAKPOINT_LEN_5:
|
||||||
|
len_in_bytes = 5;
|
||||||
|
break;
|
||||||
|
case ARM_BREAKPOINT_LEN_6:
|
||||||
|
len_in_bytes = 6;
|
||||||
|
break;
|
||||||
|
case ARM_BREAKPOINT_LEN_7:
|
||||||
|
len_in_bytes = 7;
|
||||||
|
break;
|
||||||
case ARM_BREAKPOINT_LEN_8:
|
case ARM_BREAKPOINT_LEN_8:
|
||||||
len_in_bytes = 8;
|
len_in_bytes = 8;
|
||||||
break;
|
break;
|
||||||
|
@ -381,9 +393,21 @@ int arch_bp_generic_fields(struct arch_hw_breakpoint_ctrl ctrl,
|
||||||
case ARM_BREAKPOINT_LEN_2:
|
case ARM_BREAKPOINT_LEN_2:
|
||||||
*gen_len = HW_BREAKPOINT_LEN_2;
|
*gen_len = HW_BREAKPOINT_LEN_2;
|
||||||
break;
|
break;
|
||||||
|
case ARM_BREAKPOINT_LEN_3:
|
||||||
|
*gen_len = HW_BREAKPOINT_LEN_3;
|
||||||
|
break;
|
||||||
case ARM_BREAKPOINT_LEN_4:
|
case ARM_BREAKPOINT_LEN_4:
|
||||||
*gen_len = HW_BREAKPOINT_LEN_4;
|
*gen_len = HW_BREAKPOINT_LEN_4;
|
||||||
break;
|
break;
|
||||||
|
case ARM_BREAKPOINT_LEN_5:
|
||||||
|
*gen_len = HW_BREAKPOINT_LEN_5;
|
||||||
|
break;
|
||||||
|
case ARM_BREAKPOINT_LEN_6:
|
||||||
|
*gen_len = HW_BREAKPOINT_LEN_6;
|
||||||
|
break;
|
||||||
|
case ARM_BREAKPOINT_LEN_7:
|
||||||
|
*gen_len = HW_BREAKPOINT_LEN_7;
|
||||||
|
break;
|
||||||
case ARM_BREAKPOINT_LEN_8:
|
case ARM_BREAKPOINT_LEN_8:
|
||||||
*gen_len = HW_BREAKPOINT_LEN_8;
|
*gen_len = HW_BREAKPOINT_LEN_8;
|
||||||
break;
|
break;
|
||||||
|
@ -427,9 +451,21 @@ static int arch_build_bp_info(struct perf_event *bp)
|
||||||
case HW_BREAKPOINT_LEN_2:
|
case HW_BREAKPOINT_LEN_2:
|
||||||
info->ctrl.len = ARM_BREAKPOINT_LEN_2;
|
info->ctrl.len = ARM_BREAKPOINT_LEN_2;
|
||||||
break;
|
break;
|
||||||
|
case HW_BREAKPOINT_LEN_3:
|
||||||
|
info->ctrl.len = ARM_BREAKPOINT_LEN_3;
|
||||||
|
break;
|
||||||
case HW_BREAKPOINT_LEN_4:
|
case HW_BREAKPOINT_LEN_4:
|
||||||
info->ctrl.len = ARM_BREAKPOINT_LEN_4;
|
info->ctrl.len = ARM_BREAKPOINT_LEN_4;
|
||||||
break;
|
break;
|
||||||
|
case HW_BREAKPOINT_LEN_5:
|
||||||
|
info->ctrl.len = ARM_BREAKPOINT_LEN_5;
|
||||||
|
break;
|
||||||
|
case HW_BREAKPOINT_LEN_6:
|
||||||
|
info->ctrl.len = ARM_BREAKPOINT_LEN_6;
|
||||||
|
break;
|
||||||
|
case HW_BREAKPOINT_LEN_7:
|
||||||
|
info->ctrl.len = ARM_BREAKPOINT_LEN_7;
|
||||||
|
break;
|
||||||
case HW_BREAKPOINT_LEN_8:
|
case HW_BREAKPOINT_LEN_8:
|
||||||
info->ctrl.len = ARM_BREAKPOINT_LEN_8;
|
info->ctrl.len = ARM_BREAKPOINT_LEN_8;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue