From: Kajol Jain <kj...@linux.ibm.com>

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 <kj...@linux.ibm.com>
---
 .../powerpc/pmu/sampling_tests/misc.c         | 21 ++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c 
b/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.c
index f2baaeaea116..045e6204fba6 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
-- 
2.35.1

Reply via email to