lkml.org 
[lkml]   [2019]   [Nov]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 23/63] perf probe: Fix to show inlined function callsite without entry_pc
    Date
    From: Masami Hiramatsu <mhiramat@kernel.org>

    Fix 'perf probe --line' option to show inlined function callsite lines
    even if the function DIE has only ranges.

    Without this:

    # perf probe -L amd_put_event_constraints
    ...
    2 {
    3 if (amd_has_nb(cpuc) && amd_is_nb_event(&event->hw))
    __amd_put_nb_event_constraints(cpuc, event);
    5 }

    With this patch:

    # perf probe -L amd_put_event_constraints
    ...
    2 {
    3 if (amd_has_nb(cpuc) && amd_is_nb_event(&event->hw))
    4 __amd_put_nb_event_constraints(cpuc, event);
    5 }

    Committer testing:

    Before:

    [root@quaco ~]# perf probe -L amd_put_event_constraints
    <amd_put_event_constraints@/usr/src/debug/kernel-5.2.fc30/linux-5.2.18-200.fc30.x86_64/arch/x86/events/amd/core.c:0>
    0 static void amd_put_event_constraints(struct cpu_hw_events *cpuc,
    struct perf_event *event)
    2 {
    3 if (amd_has_nb(cpuc) && amd_is_nb_event(&event->hw))
    __amd_put_nb_event_constraints(cpuc, event);
    5 }

    PMU_FORMAT_ATTR(event, "config:0-7,32-35");
    PMU_FORMAT_ATTR(umask, "config:8-15" );

    [root@quaco ~]#

    After:

    [root@quaco ~]# perf probe -L amd_put_event_constraints
    <amd_put_event_constraints@/usr/src/debug/kernel-5.2.fc30/linux-5.2.18-200.fc30.x86_64/arch/x86/events/amd/core.c:0>
    0 static void amd_put_event_constraints(struct cpu_hw_events *cpuc,
    struct perf_event *event)
    2 {
    3 if (amd_has_nb(cpuc) && amd_is_nb_event(&event->hw))
    4 __amd_put_nb_event_constraints(cpuc, event);
    5 }

    PMU_FORMAT_ATTR(event, "config:0-7,32-35");
    PMU_FORMAT_ATTR(umask, "config:8-15" );

    [root@quaco ~]# perf probe amd_put_event_constraints:4
    Added new event:
    probe:amd_put_event_constraints (on amd_put_event_constraints:4)

    You can now use it in all perf tools, such as:

    perf record -e probe:amd_put_event_constraints -aR sleep 1

    [root@quaco ~]#

    [root@quaco ~]# perf probe -l
    probe:amd_put_event_constraints (on amd_put_event_constraints:4@arch/x86/events/amd/core.c)
    probe:clear_tasks_mm_cpumask (on clear_tasks_mm_cpumask@kernel/cpu.c)
    [root@quaco ~]#

    Using it:

    [root@quaco ~]# perf trace -e probe:*
    ^C[root@quaco ~]#

    Ok, Intel system here... :-)

    Fixes: 4cc9cec636e7 ("perf probe: Introduce lines walker interface")
    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Link: http://lore.kernel.org/lkml/157199322107.8075.12659099000567865708.stgit@devnote2
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/util/dwarf-aux.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/tools/perf/util/dwarf-aux.c b/tools/perf/util/dwarf-aux.c
    index 063f71da6b63..e0c507d6b3b4 100644
    --- a/tools/perf/util/dwarf-aux.c
    +++ b/tools/perf/util/dwarf-aux.c
    @@ -695,7 +695,7 @@ static int __die_walk_funclines_cb(Dwarf_Die *in_die, void *data)
    if (dwarf_tag(in_die) == DW_TAG_inlined_subroutine) {
    fname = die_get_call_file(in_die);
    lineno = die_get_call_lineno(in_die);
    - if (fname && lineno > 0 && dwarf_entrypc(in_die, &addr) == 0) {
    + if (fname && lineno > 0 && die_entrypc(in_die, &addr) == 0) {
    lw->retval = lw->callback(fname, lineno, addr, lw->data);
    if (lw->retval != 0)
    return DIE_FIND_CB_END;
    --
    2.21.0
    \
     
     \ /
      Last update: 2019-11-07 20:04    [W:2.809 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site