Messages in this thread | | | Date | Thu, 9 Apr 2015 15:38:53 +0800 | From | He Kuang <> | Subject | Re: [PATCH 2/2] perf data: Fix ctf_writer setupenv failure |
| |
On 2015/4/9 1:59, Jiri Olsa wrote: > On Wed, Apr 08, 2015 at 12:49:20PM +0800, He Kuang wrote: >> Due to babeltrace commit: >> 7f800dc7c2a1 ("ir: make trace environment use bt_object") >> >> The trace->frozen flag is set in bt_ctf_trace_create_stream(), this flag >> is checked before adding environment field to trace, and causes >> ctf_writer__setup_env() failed. Fix this by setting all environment >> fields before bt_ctf_trace_create_stream(). >> >> Before this patch: >> $ perf data convert --to-ctf=ctf >> Error during CTF convert setup. > have you tested with the latest babeltrace sources? > this reminds me the bug they fixed recently, CCing Jeremie > > thanks, > jirka
Yes, the latest babeltrace commit id: dfdad2587b12d454e7235e01508a266d83e3e264 >> After this patch: >> $ perf data convert --to-ctf=ctf >> [ perf data convert: Converted 'perf.data' into CTF data 'ctf' ] >> [ perf data convert: Converted and wrote 0.023 MB (596 samples) ] >> >> Signed-off-by: He Kuang <hekuang@huawei.com> >> --- >> tools/perf/util/data-convert-bt.c | 30 ++++++++++++++++++++---------- >> 1 file changed, 20 insertions(+), 10 deletions(-) >> >> diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-convert-bt.c >> index a5b89b9..718dc8a 100644 >> --- a/tools/perf/util/data-convert-bt.c >> +++ b/tools/perf/util/data-convert-bt.c >> @@ -604,6 +604,22 @@ static int setup_events(struct ctf_writer *cw, struct perf_session *session) >> return 0; >> } >> >> +static int ctf_writer__setup_stream(struct ctf_writer *cw) >> +{ >> + struct bt_ctf_stream *stream; >> + >> + /* CTF stream instance */ >> + stream = bt_ctf_writer_create_stream(cw->writer, cw->stream_class); >> + if (!stream) { >> + pr("Failed to create CTF stream.\n"); >> + return -1; >> + } >> + >> + cw->stream = stream; >> + >> + return 0; >> +} >> + >> static int ctf_writer__setup_env(struct ctf_writer *cw, >> struct perf_session *session) >> { >> @@ -725,7 +741,6 @@ static int ctf_writer__init(struct ctf_writer *cw, const char *path) >> { >> struct bt_ctf_writer *writer; >> struct bt_ctf_stream_class *stream_class; >> - struct bt_ctf_stream *stream; >> struct bt_ctf_clock *clock; >> >> /* CTF writer */ >> @@ -767,15 +782,6 @@ static int ctf_writer__init(struct ctf_writer *cw, const char *path) >> if (ctf_writer__init_data(cw)) >> goto err_cleanup; >> >> - /* CTF stream instance */ >> - stream = bt_ctf_writer_create_stream(writer, stream_class); >> - if (!stream) { >> - pr("Failed to create CTF stream.\n"); >> - goto err_cleanup; >> - } >> - >> - cw->stream = stream; >> - >> /* CTF clock writer setup */ >> if (bt_ctf_writer_add_clock(writer, clock)) { >> pr("Failed to assign CTF clock to writer.\n"); >> @@ -830,6 +836,10 @@ int bt_convert__perf2ctf(const char *input, const char *path, bool force) >> if (ctf_writer__setup_env(cw, session)) >> goto free_session; >> >> + /* CTF writer trace stream setup */ >> + if (ctf_writer__setup_stream(cw)) >> + goto free_session; >> + >> /* CTF events setup */ >> if (setup_events(cw, session)) >> goto free_session; >> -- >> 2.3.3.220.g9ab698f >> >
| |