• Kan Liang's avatar
    perf machine: Refine the function for LBR call stack reconstruction · e48b8311
    Kan Liang authored
    LBR only collect the user call stack. To reconstruct a call stack, both
    kernel call stack and user call stack are required. The function
    resolve_lbr_callchain_sample() mix the kernel call stack and user call
    stack.
    
    Now, with the help of HW idx, perf tool can reconstruct a more complete
    call stack by adding some user call stack from previous sample. However,
    current implementation is hard to be extended to support it.
    
    Current code path for resolve_lbr_callchain_sample()
    
      for (j = 0; j < mix_chain_nr; j++) {
           if (ORDER_CALLEE) {
                 if (kernel callchain)
                      Fill callchain info
                 else if (LBR callchain)
                      Fill callchain info
           } else {
                 if (LBR callchain)
                      Fill callchain info
                 else if (kernel callchain)
                      Fill callchain info
           }
           add_callchain_ip();
      }
    
    With the patch,
    
      if (ORDER_CALLEE) {
           for (j = 0; j < NUM of kernel callchain) {
                 Fill callchain info
                 add_callchain_ip();
           }
           for (; j < mix_chain_nr) {
                 Fill callchain info
                 add_callchain_ip();
           }
      } else {
           for (; j < NUM of LBR callchain) {
                 Fill callchain info
                 add_callchain_ip();
           }
           for (j = 0; j < mix_chain_nr) {
                 Fill callchain info
                 add_callchain_ip();
           }
      }
    
    No functional changes.
    Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Reviewed-by: default avatarAndi Kleen <ak@linux.intel.com>
    Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
    Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Pavel Gerasimov <pavel.gerasimov@intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Vitaly Slobodskoy <vitaly.slobodskoy@intel.com>
    Link: http://lore.kernel.org/lkml/20200319202517.23423-7-kan.liang@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    e48b8311
machine.c 66.6 KB