Commit 7689bdca authored by Anshuman Khandual's avatar Anshuman Khandual Committed by Benjamin Herrenschmidt

powerpc/perf: Ignore separate BHRB privilege state filter request

Completely ignore BHRB privilege state filter request as we are
already configuring that with privilege state filtering attribute
for the accompanying PMU event. This would help achieve cleaner
user space interaction for BHRB.

This patch fixes a situation like this

Before patch:-
------------
./perf record -j any -e branch-misses:k ls
Error:
The sys_perf_event_open() syscall returned with 95 (Operation not
supported) for event (branch-misses:k).
/bin/dmesg may provide additional information.
No CONFIG_PERF_EVENTS=y kernel support configured?

Here 'perf record' actually copies over ':k' filter request into BHRB
privilege state filter config and our previous check in kernel would
fail that.

After patch:-
-------------
./perf record -j any -e branch-misses:k ls
perf  perf.data  perf.data.old  test-mmap-ring
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.002 MB perf.data (~102 samples)]
Signed-off-by: default avatarAnshuman Khandual <khandual@linux.vnet.ibm.com>
Acked-by: default avatarMichael Neuling <mikey@neuling.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 67975005
...@@ -561,18 +561,13 @@ static int power8_generic_events[] = { ...@@ -561,18 +561,13 @@ static int power8_generic_events[] = {
static u64 power8_bhrb_filter_map(u64 branch_sample_type) static u64 power8_bhrb_filter_map(u64 branch_sample_type)
{ {
u64 pmu_bhrb_filter = 0; u64 pmu_bhrb_filter = 0;
u64 br_privilege = branch_sample_type & ONLY_PLM;
/* BHRB and regular PMU events share the same prvillege state /* BHRB and regular PMU events share the same privilege state
* filter configuration. BHRB is always recorded along with a * filter configuration. BHRB is always recorded along with a
* regular PMU event. So privilege state filter criteria for BHRB * regular PMU event. As the privilege state filter is handled
* and the companion PMU events has to be the same. As a default * in the basic PMC configuration of the accompanying regular
* "perf record" tool sets all privillege bits ON when no filter * PMU event, we ignore any separate BHRB specific request.
* criteria is provided in the command line. So as along as all
* privillege bits are ON or they are OFF, we are good to go.
*/ */
if ((br_privilege != 7) && (br_privilege != 0))
return -1;
/* No branch filter requested */ /* No branch filter requested */
if (branch_sample_type & PERF_SAMPLE_BRANCH_ANY) if (branch_sample_type & PERF_SAMPLE_BRANCH_ANY)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment