• Anshuman Khandual's avatar
    powerpc/perf: Configure BHRB filter before enabling PMU interrupts · b4d6c06c
    Anshuman Khandual authored
    Right now the config_bhrb() PMU specific call happens after
    write_mmcr0(), which actually enables the PMU for event counting and
    interrupts. So there is a small window of time where the PMU and BHRB
    runs without the required HW branch filter (if any) enabled in BHRB.
    
    This can cause some of the branch samples to be collected through BHRB
    without any filter applied and hence affects the correctness of
    the results. This patch moves the BHRB config function call before
    enabling interrupts.
    
    Here are some data points captured via trace prints which depicts how we
    could get PMU interrupts with BHRB filter NOT enabled with a standard
    perf record command line (asking for branch record information as well).
    
        $ perf record -j any_call ls
    
    Before the patch:-
    
        ls-1962  [003] d...  2065.299590: .perf_event_interrupt: MMCRA: 40000000000
        ls-1962  [003] d...  2065.299603: .perf_event_interrupt: MMCRA: 40000000000
        ...
    
        All the PMU interrupts before this point did not have the requested
        HW branch filter enabled in the MMCRA.
    
        ls-1962  [003] d...  2065.299647: .perf_event_interrupt: MMCRA: 40040000000
        ls-1962  [003] d...  2065.299662: .perf_event_interrupt: MMCRA: 40040000000
    
    After the patch:-
    
        ls-1850  [008] d...   190.311828: .perf_event_interrupt: MMCRA: 40040000000
        ls-1850  [008] d...   190.311848: .perf_event_interrupt: MMCRA: 40040000000
    
        All the PMU interrupts have the requested HW BHRB branch filter
        enabled in MMCRA.
    Signed-off-by: default avatarAnshuman Khandual <khandual@linux.vnet.ibm.com>
    [mpe: Fixed up whitespace and cleaned up changelog]
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
    b4d6c06c
core-book3s.c 47.9 KB