• Namhyung Kim's avatar
    perf evlist: Enhance perf_evlist__start_workload() · bcf3145f
    Namhyung Kim authored
    When perf tries to start a workload, it relies on a pipe which the
    workload was blocked for reading.  After closing the pipe on the parent,
    the workload (child) can start the actual work via exec().
    
    However, if another process was forked after creating a workload, this
    mechanism cannot work since the other process (child) also inherits the
    pipe, so that closing the pipe in parent cannot unblock the workload.
    Fix it by using explicit write call can then closing it.
    
    For similar reason, the pipe fd on parent should be marked as CLOEXEC so
    that it can be closed after another child exec'ed.
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Link: http://lkml.kernel.org/r/1372230862-15861-13-git-send-email-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    bcf3145f
evlist.c 20.2 KB