• Paul Mackerras's avatar
    perf_counter: call hw_perf_save_disable/restore around group_sched_in · e758a33d
    Paul Mackerras authored
    I noticed that when enabling a group via the PERF_COUNTER_IOC_ENABLE
    ioctl on the group leader, the counters weren't enabled and counting
    immediately on return from the ioctl, but did start counting a little
    while later (presumably after a context switch).
    
    The reason was that __perf_counter_enable calls group_sched_in which
    calls hw_perf_group_sched_in, which on powerpc assumes that the caller
    has called hw_perf_save_disable already.  Until commit 46d686c6
    ("perf_counter: put whole group on when enabling group leader") it was
    true that all callers of group_sched_in had called
    hw_perf_save_disable first, and the powerpc hw_perf_group_sched_in
    relies on that (there isn't an x86 version).
    
    This fixes the problem by putting calls to hw_perf_save_disable /
    hw_perf_restore around the calls to group_sched_in and
    counter_sched_in in __perf_counter_enable.  Having the calls to
    hw_perf_save_disable/restore around the counter_sched_in call is
    harmless and makes this call consistent with the other call sites
    of counter_sched_in, which have all called hw_perf_save_disable first.
    
    [ Impact: more precise counter group disable/enable functionality ]
    Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
    LKML-Reference: <18953.25733.53359.147452@cargo.ozlabs.ibm.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    e758a33d
perf_counter.c 80.4 KB