• Athira Rajeev's avatar
    powerpc/perf: Fix branch_filter support for multiple filters · b9c00127
    Athira Rajeev authored
    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. eg:
    
      $ perf record -b -o- -B --branch-filter any,ind_call true
    
    None of the Power PMUs support having multiple branch filters at
    the same time. Branch filters for branch stack sampling is set via MMCRA
    IFM bits [32:33]. But currently when requesting for multiple filter
    types, the "perf record" command does not report any error.
    
    eg:
      $ perf record -b -o- -B --branch-filter any,save_type true
      $ perf record -b -o- -B --branch-filter any,ind_call true
    
    The "bhrb_filter_map" function in PMU driver code does the validity
    check for supported branch filters. But this check is done for single
    filter. Hence "perf record" will proceed here without reporting any
    error.
    
    Fix power_pmu_event_init() to return EOPNOTSUPP when multiple branch
    filters are requested in the event attr.
    
    After the fix:
      $ perf record --branch-filter any,ind_call -- ls
      Error:
      cycles: PMU Hardware doesn't support sampling/overflow-interrupts.
      Try 'perf stat'
    Reported-by: default avatarDisha Goel <disgoel@linux.vnet.ibm.com>
    Signed-off-by: default avatarAthira Rajeev <atrajeev@linux.vnet.ibm.com>
    Tested-by: Disha Goel<disgoel@linux.vnet.ibm.com>
    Reviewed-by: default avatarMadhavan Srinivasan <maddy@linux.ibm.com>
    Reviewed-by: default avatarKajol Jain <kjain@linux.ibm.com>
    [mpe: Tweak comment and change log wording]
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20220921145255.20972-1-atrajeev@linux.vnet.ibm.com
    b9c00127
core-book3s.c 66.6 KB