• Eric B Munson's avatar
    perf_event: Fix broken calc_timer_values() · 7f310a5d
    Eric B Munson authored
    We detected a serious issue with PERF_SAMPLE_READ and
    timing information when events were being multiplexing.
    
    Samples would have time_running > time_enabled. That
    was easy to reproduce with a libpfm4 example (ran 3
    times to cause multiplexing on Core 2):
    
     $ syst_smpl -e uops_retired:freq=1 &
     $ syst_smpl -e uops_retired:freq=1 &
     $ syst_smpl -e uops_retired:freq=1 &
     IIP:0x0000000040062d ... PERIOD:2355332948 ENA=40144625315 RUN=60014875184
     syst_smpl: WARNING: time_running > time_enabled
    	63277537998 uops_retired:freq=1 , scaled
    
    The bug was not present in kernel up to (and including) 3.0. It turns
    out the bug was introduced by the following commit:
    
    commit c4794295
    
        events: Move lockless timer calculation into helper function
    
    The parameters of the function got reversed yet the call sites
    were not updated to reflect the change. That lead to time_running
    and time_enabled being swapped. That had no effect when there was
    no multiplexing because in that case time_running = time_enabled
    but it would show up in any other scenario.
    Signed-off-by: default avatarStephane Eranian <eranian@google.com>
    Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/20110829124112.GA4828@quadSigned-off-by: default avatarIngo Molnar <mingo@elte.hu>
    7f310a5d
core.c 161 KB