diff options
author | Madhavan Srinivasan <maddy@linux.vnet.ibm.com> | 2018-12-09 04:25:36 -0500 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2019-01-08 03:22:47 -0500 |
commit | 6529870cb0323823f49b3e95d1760383910f96cd (patch) | |
tree | 0c872b0687b7bcdf74da380b341fbb3ca347598c | |
parent | bfeffd155283772bbe78c6a05dec7c0128ee500c (diff) |
powerpc/perf: Update perf_regs structure to include MMCRA
On each sample, Monitor Mode Control Register A (MMCRA) content is
saved in pt_regs. MMCRA does not have a entry as-is in the pt_regs but
instead, MMCRA content is saved in the "dsisr" register of pt_regs.
Patch adds another entry to the perf_regs structure to include the
"MMCRA" printing which internally maps to the "dsisr" of pt_regs.
It also check for the MMCRA availability in the platform and present
value accordingly
mpe: This was the 2nd patch in a series with commit 333804dc3b7a
("powerpc/perf: Update perf_regs structure to include SIER") but I
accidentally only merged the 1st patch, so merge this one now.
Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
-rw-r--r-- | arch/powerpc/include/uapi/asm/perf_regs.h | 1 | ||||
-rw-r--r-- | arch/powerpc/perf/perf_regs.c | 6 | ||||
-rw-r--r-- | tools/arch/powerpc/include/uapi/asm/perf_regs.h | 1 | ||||
-rw-r--r-- | tools/perf/arch/powerpc/include/perf_regs.h | 3 | ||||
-rw-r--r-- | tools/perf/arch/powerpc/util/perf_regs.c | 1 |
5 files changed, 11 insertions, 1 deletions
diff --git a/arch/powerpc/include/uapi/asm/perf_regs.h b/arch/powerpc/include/uapi/asm/perf_regs.h index ff91192407d1..f599064dd8dc 100644 --- a/arch/powerpc/include/uapi/asm/perf_regs.h +++ b/arch/powerpc/include/uapi/asm/perf_regs.h | |||
@@ -47,6 +47,7 @@ enum perf_event_powerpc_regs { | |||
47 | PERF_REG_POWERPC_DAR, | 47 | PERF_REG_POWERPC_DAR, |
48 | PERF_REG_POWERPC_DSISR, | 48 | PERF_REG_POWERPC_DSISR, |
49 | PERF_REG_POWERPC_SIER, | 49 | PERF_REG_POWERPC_SIER, |
50 | PERF_REG_POWERPC_MMCRA, | ||
50 | PERF_REG_POWERPC_MAX, | 51 | PERF_REG_POWERPC_MAX, |
51 | }; | 52 | }; |
52 | #endif /* _UAPI_ASM_POWERPC_PERF_REGS_H */ | 53 | #endif /* _UAPI_ASM_POWERPC_PERF_REGS_H */ |
diff --git a/arch/powerpc/perf/perf_regs.c b/arch/powerpc/perf/perf_regs.c index 5c36b3a8d47a..3349f3f8fe84 100644 --- a/arch/powerpc/perf/perf_regs.c +++ b/arch/powerpc/perf/perf_regs.c | |||
@@ -70,6 +70,7 @@ static unsigned int pt_regs_offset[PERF_REG_POWERPC_MAX] = { | |||
70 | PT_REGS_OFFSET(PERF_REG_POWERPC_DAR, dar), | 70 | PT_REGS_OFFSET(PERF_REG_POWERPC_DAR, dar), |
71 | PT_REGS_OFFSET(PERF_REG_POWERPC_DSISR, dsisr), | 71 | PT_REGS_OFFSET(PERF_REG_POWERPC_DSISR, dsisr), |
72 | PT_REGS_OFFSET(PERF_REG_POWERPC_SIER, dar), | 72 | PT_REGS_OFFSET(PERF_REG_POWERPC_SIER, dar), |
73 | PT_REGS_OFFSET(PERF_REG_POWERPC_MMCRA, dsisr), | ||
73 | }; | 74 | }; |
74 | 75 | ||
75 | u64 perf_reg_value(struct pt_regs *regs, int idx) | 76 | u64 perf_reg_value(struct pt_regs *regs, int idx) |
@@ -83,6 +84,11 @@ u64 perf_reg_value(struct pt_regs *regs, int idx) | |||
83 | !is_sier_available())) | 84 | !is_sier_available())) |
84 | return 0; | 85 | return 0; |
85 | 86 | ||
87 | if (idx == PERF_REG_POWERPC_MMCRA && | ||
88 | (IS_ENABLED(CONFIG_FSL_EMB_PERF_EVENT) || | ||
89 | IS_ENABLED(CONFIG_PPC32))) | ||
90 | return 0; | ||
91 | |||
86 | return regs_get_register(regs, pt_regs_offset[idx]); | 92 | return regs_get_register(regs, pt_regs_offset[idx]); |
87 | } | 93 | } |
88 | 94 | ||
diff --git a/tools/arch/powerpc/include/uapi/asm/perf_regs.h b/tools/arch/powerpc/include/uapi/asm/perf_regs.h index ff91192407d1..f599064dd8dc 100644 --- a/tools/arch/powerpc/include/uapi/asm/perf_regs.h +++ b/tools/arch/powerpc/include/uapi/asm/perf_regs.h | |||
@@ -47,6 +47,7 @@ enum perf_event_powerpc_regs { | |||
47 | PERF_REG_POWERPC_DAR, | 47 | PERF_REG_POWERPC_DAR, |
48 | PERF_REG_POWERPC_DSISR, | 48 | PERF_REG_POWERPC_DSISR, |
49 | PERF_REG_POWERPC_SIER, | 49 | PERF_REG_POWERPC_SIER, |
50 | PERF_REG_POWERPC_MMCRA, | ||
50 | PERF_REG_POWERPC_MAX, | 51 | PERF_REG_POWERPC_MAX, |
51 | }; | 52 | }; |
52 | #endif /* _UAPI_ASM_POWERPC_PERF_REGS_H */ | 53 | #endif /* _UAPI_ASM_POWERPC_PERF_REGS_H */ |
diff --git a/tools/perf/arch/powerpc/include/perf_regs.h b/tools/perf/arch/powerpc/include/perf_regs.h index 1076393e6f43..e18a3556f5e3 100644 --- a/tools/perf/arch/powerpc/include/perf_regs.h +++ b/tools/perf/arch/powerpc/include/perf_regs.h | |||
@@ -63,7 +63,8 @@ static const char *reg_names[] = { | |||
63 | [PERF_REG_POWERPC_TRAP] = "trap", | 63 | [PERF_REG_POWERPC_TRAP] = "trap", |
64 | [PERF_REG_POWERPC_DAR] = "dar", | 64 | [PERF_REG_POWERPC_DAR] = "dar", |
65 | [PERF_REG_POWERPC_DSISR] = "dsisr", | 65 | [PERF_REG_POWERPC_DSISR] = "dsisr", |
66 | [PERF_REG_POWERPC_SIER] = "sier" | 66 | [PERF_REG_POWERPC_SIER] = "sier", |
67 | [PERF_REG_POWERPC_MMCRA] = "mmcra" | ||
67 | }; | 68 | }; |
68 | 69 | ||
69 | static inline const char *perf_reg_name(int id) | 70 | static inline const char *perf_reg_name(int id) |
diff --git a/tools/perf/arch/powerpc/util/perf_regs.c b/tools/perf/arch/powerpc/util/perf_regs.c index 07fcd977d93e..34d5134681d9 100644 --- a/tools/perf/arch/powerpc/util/perf_regs.c +++ b/tools/perf/arch/powerpc/util/perf_regs.c | |||
@@ -53,6 +53,7 @@ const struct sample_reg sample_reg_masks[] = { | |||
53 | SMPL_REG(dar, PERF_REG_POWERPC_DAR), | 53 | SMPL_REG(dar, PERF_REG_POWERPC_DAR), |
54 | SMPL_REG(dsisr, PERF_REG_POWERPC_DSISR), | 54 | SMPL_REG(dsisr, PERF_REG_POWERPC_DSISR), |
55 | SMPL_REG(sier, PERF_REG_POWERPC_SIER), | 55 | SMPL_REG(sier, PERF_REG_POWERPC_SIER), |
56 | SMPL_REG(mmcra, PERF_REG_POWERPC_MMCRA), | ||
56 | SMPL_REG_END | 57 | SMPL_REG_END |
57 | }; | 58 | }; |
58 | 59 | ||