mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
b7883a1c4f
commit
b26b218a1e
|
@ -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;
|
||||
if (max_stack <= 0)
|
||||
return -EINVAL;
|
||||
|
||||
ret = entry(ip, thread, cb, arg);
|
||||
if (ret)
|
||||
return -ENOMEM;
|
||||
|
||||
return --max_stack > 0 ? get_entries(&ui, cb, arg, max_stack) : 0;
|
||||
return get_entries(&ui, cb, arg, max_stack);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue