• S
    perf: Add callback to flush branch_stack on context switch · d010b332
    Stephane Eranian 提交于
    With branch stack sampling, it is possible to filter by priv levels.
    
    In system-wide mode, that means it is possible to capture only user
    level branches. The builtin SW LBR filter needs to disassemble code
    based on LBR captured addresses. For that, it needs to know the task
    the addresses are associated with. Because of context switches, the
    content of the branch stack buffer may contain addresses from
    different tasks.
    
    We need a callback on context switch to either flush the branch stack
    or save it. This patch adds a new callback in struct pmu which is called
    during context switches. The callback is called only when necessary.
    That is when a system-wide context has, at least, one event which
    uses PERF_SAMPLE_BRANCH_STACK. The callback is never called for
    per-thread context.
    
    In this version, the Intel x86 code simply flushes (resets) the LBR
    on context switches (fills it with zeroes). Those zeroed branches are
    then filtered out by the SW filter.
    Signed-off-by: NStephane Eranian <eranian@google.com>
    Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/1328826068-11713-11-git-send-email-eranian@google.comSigned-off-by: NIngo Molnar <mingo@elte.hu>
    d010b332
perf_event.c 42.1 KB