perf tools: Pass a fd to perf_file_header__read_pipe()
Currently it unconditionally writes to stdout for repipe. But perf inject can direct its output to a regular file. Then it needs to write the header to the file as well. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Jiri Olsa <jolsa@redhat.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Ian Rogers <irogers@google.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lore.kernel.org/lkml/20210719223153.1618812-3-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
committed by
Arnaldo Carvalho de Melo
parent
2681bd85a4
commit
0ae0389362
@@ -3865,10 +3865,10 @@ static int perf_file_section__process(struct perf_file_section *section,
|
||||
static int perf_file_header__read_pipe(struct perf_pipe_file_header *header,
|
||||
struct perf_header *ph,
|
||||
struct perf_data* data,
|
||||
bool repipe)
|
||||
bool repipe, int repipe_fd)
|
||||
{
|
||||
struct feat_fd ff = {
|
||||
.fd = STDOUT_FILENO,
|
||||
.fd = repipe_fd,
|
||||
.ph = ph,
|
||||
};
|
||||
ssize_t ret;
|
||||
@@ -3891,13 +3891,13 @@ static int perf_file_header__read_pipe(struct perf_pipe_file_header *header,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int perf_header__read_pipe(struct perf_session *session)
|
||||
static int perf_header__read_pipe(struct perf_session *session, int repipe_fd)
|
||||
{
|
||||
struct perf_header *header = &session->header;
|
||||
struct perf_pipe_file_header f_header;
|
||||
|
||||
if (perf_file_header__read_pipe(&f_header, header, session->data,
|
||||
session->repipe) < 0) {
|
||||
session->repipe, repipe_fd) < 0) {
|
||||
pr_debug("incompatible file format\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -3995,7 +3995,7 @@ static int evlist__prepare_tracepoint_events(struct evlist *evlist, struct tep_h
|
||||
return 0;
|
||||
}
|
||||
|
||||
int perf_session__read_header(struct perf_session *session)
|
||||
int perf_session__read_header(struct perf_session *session, int repipe_fd)
|
||||
{
|
||||
struct perf_data *data = session->data;
|
||||
struct perf_header *header = &session->header;
|
||||
@@ -4016,7 +4016,7 @@ int perf_session__read_header(struct perf_session *session)
|
||||
* We can read 'pipe' data event from regular file,
|
||||
* check for the pipe header regardless of source.
|
||||
*/
|
||||
err = perf_header__read_pipe(session);
|
||||
err = perf_header__read_pipe(session, repipe_fd);
|
||||
if (!err || perf_data__is_pipe(data)) {
|
||||
data->is_pipe = true;
|
||||
return err;
|
||||
|
||||
Reference in New Issue
Block a user