• Peter Zijlstra's avatar
    perf, x86: Fix hw_perf_enable() event assignment · 45e16a68
    Peter Zijlstra authored
    What happens is that we schedule badly like:
    
    <...>-1987  [019]   280.252808: x86_pmu_start: event-46/1300c0: idx: 0
    <...>-1987  [019]   280.252811: x86_pmu_start: event-47/1300c0: idx: 1
    <...>-1987  [019]   280.252812: x86_pmu_start: event-48/1300c0: idx: 2
    <...>-1987  [019]   280.252813: x86_pmu_start: event-49/1300c0: idx: 3
    <...>-1987  [019]   280.252814: x86_pmu_start: event-50/1300c0: idx: 32
    <...>-1987  [019]   280.252825: x86_pmu_stop: event-46/1300c0: idx: 0
    <...>-1987  [019]   280.252826: x86_pmu_stop: event-47/1300c0: idx: 1
    <...>-1987  [019]   280.252827: x86_pmu_stop: event-48/1300c0: idx: 2
    <...>-1987  [019]   280.252828: x86_pmu_stop: event-49/1300c0: idx: 3
    <...>-1987  [019]   280.252829: x86_pmu_stop: event-50/1300c0: idx: 32
    <...>-1987  [019]   280.252834: x86_pmu_start: event-47/1300c0: idx: 1
    <...>-1987  [019]   280.252834: x86_pmu_start: event-48/1300c0: idx: 2
    <...>-1987  [019]   280.252835: x86_pmu_start: event-49/1300c0: idx: 3
    <...>-1987  [019]   280.252836: x86_pmu_start: event-50/1300c0: idx: 32
    <...>-1987  [019]   280.252837: x86_pmu_start: event-51/1300c0: idx: 32 *FAIL*
    
    This happens because we only iterate the n_running events in the first
    pass, and reset their index to -1 if they don't match to force a
    re-assignment.
    
    Now, in our RR example, n_running == 0 because we fully unscheduled, so
    event-50 will retain its idx==32, even though in scheduling it will have
    gotten idx=0, and we don't trigger the re-assign path.
    
    The easiest way to fix this is the below patch, which simply validates
    the full assignment in the second pass.
    Reported-by: default avatarStephane Eranian <eranian@google.com>
    Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    LKML-Reference: <1268311069.5037.31.camel@laptop>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    45e16a68
perf_event.c 37.2 KB