Message ID | 20220921145255.20972-1-atrajeev@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [V2,1/3] powerpc/perf: Fix branch_filter support for multiple filters in powerpc | expand |
On Wed, 21 Sep 2022 20:22:53 +0530, Athira Rajeev wrote: > For PERF_SAMPLE_BRANCH_STACK sample type, different branch_sample_type > ie branch filters are supported. The branch filters are requested via > event attribute "branch_sample_type". Multiple branch filters can be > passed in event attribute. > > Example: > perf record -b -o- -B --branch-filter any,ind_call true > > [...] Patch 3 applied to powerpc/next. [3/3] tools/testing/selftests/powerpc: Update the bhrb filter sampling test to test for multiple branch filters https://git.kernel.org/powerpc/c/18213532de7156af689cb0511d2f95bcbe3c98a0 cheers
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c index 13919eb96931..a939ac3b3a84 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c @@ -2131,6 +2131,23 @@ static int power_pmu_event_init(struct perf_event *event) if (has_branch_stack(event)) { u64 bhrb_filter = -1; + /* + * powerpc does not support having multiple branch filters + * at sametime. Branch filters are set via MMCRA IFM[32:33] + * bits for power8 and above. Return EOPNOTSUPP when multiple + * branch filters are requested in the event attr. + * + * When opening event via perf_event_open, branch_sample_type + * gets adjusted in perf_copy_attr function. Kernel will + * automatically adjust the branch_sample_type based on the + * event modifier settings to include PERF_SAMPLE_BRANCH_PLM_ALL. + * Hence drop the check for PERF_SAMPLE_BRANCH_PLM_ALL. + */ + if (hweight64(event->attr.branch_sample_type & ~PERF_SAMPLE_BRANCH_PLM_ALL) > 1) { + local_irq_restore(irq_flags); + return -EOPNOTSUPP; + } + if (ppmu->bhrb_filter_map) bhrb_filter = ppmu->bhrb_filter_map( event->attr.branch_sample_type);