• Peter Zijlstra's avatar
    perf/x86: Fix n_metric for cancelled txn · 3dbde695
    Peter Zijlstra authored
    When a group that has TopDown members is failed to be scheduled, any
    later TopDown groups will not return valid values.
    
    Here is an example.
    
    A background perf that occupies all the GP counters and the fixed
    counter 1.
     $perf stat -e "{cycles,cycles,cycles,cycles,cycles,cycles,cycles,
                     cycles,cycles}:D" -a
    
    A user monitors a TopDown group. It works well, because the fixed
    counter 3 and the PERF_METRICS are available.
     $perf stat -x, --topdown -- ./workload
       retiring,bad speculation,frontend bound,backend bound,
       18.0,16.1,40.4,25.5,
    
    Then the user tries to monitor a group that has TopDown members.
    Because of the cycles event, the group is failed to be scheduled.
     $perf stat -x, -e '{slots,topdown-retiring,topdown-be-bound,
                         topdown-fe-bound,topdown-bad-spec,cycles}'
                         -- ./workload
        <not counted>,,slots,0,0.00,,
        <not counted>,,topdown-retiring,0,0.00,,
        <not counted>,,topdown-be-bound,0,0.00,,
        <not counted>,,topdown-fe-bound,0,0.00,,
        <not counted>,,topdown-bad-spec,0,0.00,,
        <not counted>,,cycles,0,0.00,,
    
    The user tries to monitor a TopDown group again. It doesn't work anymore.
     $perf stat -x, --topdown -- ./workload
    
        ,,,,,
    
    In a txn, cancel_txn() is to truncate the event_list for a canceled
    group and update the number of events added in this transaction.
    However, the number of TopDown events added in this transaction is not
    updated. The kernel will probably fail to add new Topdown events.
    
    Fixes: 7b2c05a1 ("perf/x86/intel: Generic support for hardware TopDown metrics")
    Reported-by: default avatarAndi Kleen <ak@linux.intel.com>
    Reported-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Link: https://lkml.kernel.org/r/20201005082611.GH2628@hirez.programming.kicks-ass.net
    3dbde695
perf_event.h 34.8 KB