powerpc/perf: Add Power10 BHRB filter support for PERF_SAMPLE_BRANCH_IND_CALL/COND
authorAthira Rajeev <atrajeev@linux.vnet.ibm.com>
Fri, 17 Jul 2020 14:38:22 +0000 (10:38 -0400)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 22 Jul 2020 11:56:42 +0000 (21:56 +1000)
PowerISA v3.1 introduce filtering support for
PERF_SAMPLE_BRANCH_IND_CALL/COND. The patch adds BHRB filter
support for "ind_call" and "cond" in power10_bhrb_filter_map().

Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/1594996707-3727-11-git-send-email-atrajeev@linux.vnet.ibm.com
arch/powerpc/perf/power10-pmu.c

index 4b65e95..f7cff7f 100644 (file)
@@ -83,6 +83,8 @@
 
 /* MMCRA IFM bits - POWER10 */
 #define POWER10_MMCRA_IFM1             0x0000000040000000UL
+#define POWER10_MMCRA_IFM2             0x0000000080000000UL
+#define POWER10_MMCRA_IFM3             0x00000000C0000000UL
 #define POWER10_MMCRA_BHRB_MASK                0x00000000C0000000UL
 
 /* Table of alternatives, sorted by column 0 */
@@ -233,8 +235,15 @@ static u64 power10_bhrb_filter_map(u64 branch_sample_type)
        if (branch_sample_type & PERF_SAMPLE_BRANCH_ANY_RETURN)
                return -1;
 
-       if (branch_sample_type & PERF_SAMPLE_BRANCH_IND_CALL)
-               return -1;
+       if (branch_sample_type & PERF_SAMPLE_BRANCH_IND_CALL) {
+               pmu_bhrb_filter |= POWER10_MMCRA_IFM2;
+               return pmu_bhrb_filter;
+       }
+
+       if (branch_sample_type & PERF_SAMPLE_BRANCH_COND) {
+               pmu_bhrb_filter |= POWER10_MMCRA_IFM3;
+               return pmu_bhrb_filter;
+       }
 
        if (branch_sample_type & PERF_SAMPLE_BRANCH_CALL)
                return -1;