OSDN Git Service

perf tools: Don't clone maps from parent when synthesizing forks
authorDavid Miller <davem@davemloft.net>
Wed, 31 Oct 2018 05:24:04 +0000 (22:24 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 31 Oct 2018 13:18:01 +0000 (10:18 -0300)
commit4f8f382e635707ddaddf8269a116e4f8cc8835c0
treec5fceab005fc1d526f7ce91d2323d52d530e6fb6
parentff27a06af6ffd3f49b9e193eb68f487ad76651e1
perf tools: Don't clone maps from parent when synthesizing forks

When synthesizing FORK events, we are trying to create thread objects
for the already running tasks on the machine.

Normally, for a kernel FORK event, we want to clone the parent's maps
because that is what the kernel just did.

But when synthesizing, this should not be done.  If we do, we end up
with overlapping maps as we process the sythesized MMAP2 events that
get delivered shortly thereafter.

Use the FORK event misc flags in an internal way to signal this
situation, so we can elide the map clone when appropriate.

Signed-off-by: David S. Miller <davem@davemloft.net>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Joe Mario <jmario@redhat.com>
Link: http://lkml.kernel.org/r/20181030.222404.2085088822877051075.davem@davemloft.net
[ Added comment about flag use in machine__process_fork_event(),
  use ternary op in thread__clone_map_groups() as suggested by Jiri ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
include/uapi/linux/perf_event.h
tools/include/uapi/linux/perf_event.h
tools/perf/util/event.c
tools/perf/util/machine.c
tools/perf/util/thread.c
tools/perf/util/thread.h