aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c
diff options
context:
space:
mode:
authorKajol Jain <kjain@linux.ibm.com>2022-06-10 19:10:42 +0530
committerMichael Ellerman <mpe@ellerman.id.au>2022-06-28 23:57:51 +1000
commit61d89900315aa25f6da0c1bc800ce295d74d69f1 (patch)
treeed09bf9ff46e715fc496fc08a2a471c14108f850 /tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c
parentselftests/powerpc/pmu: Add interface test for mmcra_thresh_cmp fields (diff)
downloadlinux-dev-61d89900315aa25f6da0c1bc800ce295d74d69f1.tar.xz
linux-dev-61d89900315aa25f6da0c1bc800ce295d74d69f1.zip
selftests/powerpc/pmu: Add support for branch sampling in get_intr_regs function
Add support for sample type as PERF_SAMPLE_BRANCH_STACK in sampling tests. This change is a precursor/helper for sampling testcases, that test branck stack feature in perf interface. Signed-off-by: Kajol Jain <kjain@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20220610134113.62991-5-atrajeev@linux.vnet.ibm.com
Diffstat (limited to '')
-rw-r--r--tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c b/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c
index 6e30b455cbd6..5a26fc3a9706 100644
--- a/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c
+++ b/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c
@@ -259,13 +259,32 @@ u64 *get_intr_regs(struct event *event, void *sample_buff)
u64 *intr_regs;
size_t size = 0;
- if ((type ^ PERF_SAMPLE_REGS_INTR))
+ if ((type ^ (PERF_SAMPLE_REGS_INTR | PERF_SAMPLE_BRANCH_STACK)) &&
+ (type ^ PERF_SAMPLE_REGS_INTR))
return NULL;
intr_regs = (u64 *)perf_read_first_sample(sample_buff, &size);
if (!intr_regs)
return NULL;
+ if (type & PERF_SAMPLE_BRANCH_STACK) {
+ /*
+ * PERF_RECORD_SAMPLE and PERF_SAMPLE_BRANCH_STACK:
+ * struct {
+ * struct perf_event_header hdr;
+ * u64 number_of_branches;
+ * struct perf_branch_entry[number_of_branches];
+ * u64 data[];
+ * };
+ * struct perf_branch_entry {
+ * u64 from;
+ * u64 to;
+ * u64 misc;
+ * };
+ */
+ intr_regs += ((*intr_regs) * 3) + 1;
+ }
+
/*
* First entry in the sample buffer used to specify
* PERF_SAMPLE_REGS_ABI_64, skip perf regs abi to access