lkml.org 
[lkml]   [2015]   [Nov]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] perf callchain: Move initial entry call into get_entries function
    Commit-ID:  b26b218a1e9c5815cb8964e180b7fba3cd9bd509
    Gitweb: http://git.kernel.org/tip/b26b218a1e9c5815cb8964e180b7fba3cd9bd509
    Author: Jiri Olsa <jolsa@kernel.org>
    AuthorDate: Tue, 17 Nov 2015 16:05:37 +0100
    Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
    CommitDate: Mon, 23 Nov 2015 18:30:10 -0300

    perf callchain: Move initial entry call into get_entries function

    Moving initial entry call into get_entries function so all entries
    processing is on one place. It will be useful for next change that adds
    ordering logic.

    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Tested-by: Milian Wolff <milian.wolff@kdab.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/r/1447772739-18471-2-git-send-email-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/util/unwind-libunwind.c | 25 +++++++++++++++----------
    1 file changed, 15 insertions(+), 10 deletions(-)

    diff --git a/tools/perf/util/unwind-libunwind.c b/tools/perf/util/unwind-libunwind.c
    index c83832b..0ae8844 100644
    --- a/tools/perf/util/unwind-libunwind.c
    +++ b/tools/perf/util/unwind-libunwind.c
    @@ -614,10 +614,22 @@ void unwind__finish_access(struct thread *thread)
    static int get_entries(struct unwind_info *ui, unwind_entry_cb_t cb,
    void *arg, int max_stack)
    {
    + u64 val;
    unw_addr_space_t addr_space;
    unw_cursor_t c;
    int ret;

    + ret = perf_reg_value(&val, &ui->sample->user_regs, PERF_REG_IP);
    + if (ret)
    + return ret;
    +
    + ret = entry(val, ui->thread, cb, arg);
    + if (ret)
    + return -ENOMEM;
    +
    + if (--max_stack == 0)
    + return 0;
    +
    addr_space = thread__priv(ui->thread);
    if (addr_space == NULL)
    return -1;
    @@ -640,24 +652,17 @@ int unwind__get_entries(unwind_entry_cb_t cb, void *arg,
    struct thread *thread,
    struct perf_sample *data, int max_stack)
    {
    - u64 ip;
    struct unwind_info ui = {
    .sample = data,
    .thread = thread,
    .machine = thread->mg->machine,
    };
    - int ret;

    if (!data->user_regs.regs)
    return -EINVAL;

    - ret = perf_reg_value(&ip, &data->user_regs, PERF_REG_IP);
    - if (ret)
    - return ret;
    -
    - ret = entry(ip, thread, cb, arg);
    - if (ret)
    - return -ENOMEM;
    + if (max_stack <= 0)
    + return -EINVAL;

    - return --max_stack > 0 ? get_entries(&ui, cb, arg, max_stack) : 0;
    + return get_entries(&ui, cb, arg, max_stack);
    }

    \
     
     \ /
      Last update: 2015-11-26 09:41    [W:4.245 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site