• P
    perf_counter: unify and fix delayed counter wakeup · 925d519a
    Peter Zijlstra 提交于
    While going over the wakeup code I noticed delayed wakeups only work
    for hardware counters but basically all software counters rely on
    them.
    
    This patch unifies and generalizes the delayed wakeup to fix this
    issue.
    
    Since we're dealing with NMI context bits here, use a cmpxchg() based
    single link list implementation to track counters that have pending
    wakeups.
    
    [ This should really be generic code for delayed wakeups, but since we
      cannot use cmpxchg()/xchg() in generic code, I've let it live in the
      perf_counter code. -- Eric Dumazet could use it to aggregate the
      network wakeups. ]
    
    Furthermore, the x86 method of using TIF flags was flawed in that its
    quite possible to end up setting the bit on the idle task, loosing the
    wakeup.
    
    The powerpc method uses per-cpu storage and does appear to be
    sufficient.
    Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
    Acked-by: NPaul Mackerras <paulus@samba.org>
    Orig-LKML-Reference: <20090330171023.153932974@chello.nl>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    925d519a
perf_counter.c 22.5 KB