• Paul Mackerras's avatar
    perf_counter: Allow software counters to count while task is not running · 880ca15a
    Paul Mackerras authored
    This changes perf_swcounter_match() so that per-task software
    counters can count events that occur while their associated
    task is not running.  This will allow us to use the generic
    software counter code for counting task migrations, which can
    occur while the task is not scheduled in.
    
    To do this, we have to distinguish between the situations where
    the counter is inactive because its task has been scheduled
    out, and those where the counter is inactive because it is part
    of a group that was not able to go on the PMU.  In the former
    case we want the counter to count, but not in the latter case.
    If the context is active, we have the latter case.  If the
    context is inactive then we need to know whether the counter
    was counting when the context was last active, which we can
    determine by comparing its ->tstamp_stopped timestamp with the
    context's timestamp.
    
    This also folds three checks in perf_swcounter_match, checking
    perf_event_raw(), perf_event_type() and perf_event_id()
    individually, into a single 64-bit comparison on
    counter->hw_event.config, as an optimization.
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
    Cc: Marcelo Tosatti <mtosatti@redhat.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: John Kacur <jkacur@redhat.com>
    LKML-Reference: <18979.34810.259718.955621@cargo.ozlabs.ibm.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    880ca15a
perf_counter.c 94.9 KB