diff options
| author | David S. Miller <davem@davemloft.net> | 2019-08-19 11:54:03 -0700 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2019-08-19 11:54:03 -0700 |
| commit | 446bf64b613c4433dac4b15f4eaf326beaad3c8e (patch) | |
| tree | b20b9457234f6f9a5d7464213ef6d10f95f3eed3 /tools/perf/util/thread.c | |
| parent | net: hns: add phy_attached_info() to the hns driver (diff) | |
| parent | Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net (diff) | |
| download | linux-446bf64b613c4433dac4b15f4eaf326beaad3c8e.tar.gz linux-446bf64b613c4433dac4b15f4eaf326beaad3c8e.zip | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Merge conflict of mlx5 resolved using instructions in merge
commit 9566e650bf7fdf58384bb06df634f7531ca3a97e.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools/perf/util/thread.c')
| -rw-r--r-- | tools/perf/util/thread.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c index 873ab505ca80..590793cc5142 100644 --- a/tools/perf/util/thread.c +++ b/tools/perf/util/thread.c @@ -214,14 +214,24 @@ struct comm *thread__comm(const struct thread *thread) struct comm *thread__exec_comm(const struct thread *thread) { - struct comm *comm, *last = NULL; + struct comm *comm, *last = NULL, *second_last = NULL; list_for_each_entry(comm, &thread->comm_list, list) { if (comm->exec) return comm; + second_last = last; last = comm; } + /* + * 'last' with no start time might be the parent's comm of a synthesized + * thread (created by processing a synthesized fork event). For a main + * thread, that is very probably wrong. Prefer a later comm to avoid + * that case. + */ + if (second_last && !last->start && thread->pid_ == thread->tid) + return second_last; + return last; } |
