aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-script.c
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2018-12-21 07:06:19 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2019-01-02 09:03:17 -0500
commit256d92bc93fd40411a02be5cdba74a7bf91e6e09 (patch)
tree92c8ed48b49b018b802461536265b8772339d6c7 /tools/perf/builtin-script.c
parent139f42f3b3b495e61bb2cfef40e1dd5e845e3052 (diff)
perf thread-stack: Fix thread stack processing for the idle task
perf creates a single 'struct thread' to represent the idle task. That is because threads are identified by PID and TID, and the idle task always has PID == TID == 0. However, there are actually separate idle tasks for each CPU. That creates a problem for thread stack processing which assumes that each thread has a single stack, not one stack per CPU. Fix that by passing through the CPU number, and in the case of the idle "thread", pick the thread stack from an array based on the CPU number. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Link: http://lkml.kernel.org/r/20181221120620.9659-8-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-script.c')
-rw-r--r--tools/perf/builtin-script.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 88d52ed85ffc..d079f36d342d 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -1182,7 +1182,7 @@ static int perf_sample__fprintf_callindent(struct perf_sample *sample,
1182 struct addr_location *al, FILE *fp) 1182 struct addr_location *al, FILE *fp)
1183{ 1183{
1184 struct perf_event_attr *attr = &evsel->attr; 1184 struct perf_event_attr *attr = &evsel->attr;
1185 size_t depth = thread_stack__depth(thread); 1185 size_t depth = thread_stack__depth(thread, sample->cpu);
1186 const char *name = NULL; 1186 const char *name = NULL;
1187 static int spacing; 1187 static int spacing;
1188 int len = 0; 1188 int len = 0;
@@ -1716,7 +1716,7 @@ static bool show_event(struct perf_sample *sample,
1716 struct thread *thread, 1716 struct thread *thread,
1717 struct addr_location *al) 1717 struct addr_location *al)
1718{ 1718{
1719 int depth = thread_stack__depth(thread); 1719 int depth = thread_stack__depth(thread, sample->cpu);
1720 1720
1721 if (!symbol_conf.graph_function) 1721 if (!symbol_conf.graph_function)
1722 return true; 1722 return true;