• P
    perf, x86: use LBR for PEBS IP+1 fixup · ef21f683
    Peter Zijlstra 提交于
    Use the LBR to fix up the PEBS IP+1 issue.
    
    As said, PEBS reports the next instruction, here we use the LBR to find
    the last branch and from that construct the actual IP. If the IP matches
    the LBR-TO, we use LBR-FROM, otherwise we use the LBR-TO address as the
    beginning of the last basic block and decode forward.
    
    Once we find a match to the current IP, we use the previous location.
    
    This patch introduces a new ABI element: PERF_RECORD_MISC_EXACT, which
    conveys that the reported IP (PERF_SAMPLE_IP) is the exact instruction
    that caused the event (barring CPU errata).
    
    The fixup can fail due to various reasons:
    
     1) LBR contains invalid data (quite possible)
     2) part of the basic block got paged out
     3) the reported IP isn't part of the basic block (see 1)
    Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Arnaldo Carvalho de Melo <acme@infradead.org>
    Cc: Masami Hiramatsu <mhiramat@redhat.com>
    Cc: "Zhang, Yanmin" <yanmin_zhang@linux.intel.com>
    Cc: paulus@samba.org
    Cc: eranian@google.com
    Cc: robert.richter@amd.com
    Cc: fweisbec@gmail.com
    LKML-Reference: <20100304140100.619375431@chello.nl>
    Signed-off-by: NIngo Molnar <mingo@elte.hu>
    ef21f683
perf_event_intel.c 23.8 KB