Should be fixed as of this commit. commit 29664b2a3a15c7233d916887d2f58fc42e18521e Author: Philippe Proulx <eeppelitel...@gmail.com> Date: Mon Apr 13 18:14:59 2015 -0400
Fix: ir: make sure "stream_id" attr is always right Make sure the "stream_id" attribute of all the event classes of a given stream class is updated at the following places: * user sets the stream class ID manually: calling bt_ctf_stream_class_set_id() * stream class ID is automatically set: in bt_ctf_trace_add_stream_class() * an event class is added to an existing stream class: in bt_ctf_stream_class_add_event_class() Signed-off-by: Philippe Proulx <eeppelitel...@gmail.com> Signed-off-by: Jérémie Galarneau <jeremie.galarn...@efficios.com> Jérémie On Mon, Apr 13, 2015 at 4:30 PM, Jérémie Galarneau <jeremie.galarn...@efficios.com> wrote: > On Fri, Apr 10, 2015 at 8:37 AM, Jiri Olsa <jo...@redhat.com> wrote: >> On Fri, Apr 10, 2015 at 02:05:45PM +0200, Jiri Olsa wrote: >> >> SNIP >> >>> > >>I tested by using babeltrace binary and it works. >>> > >> >>> > >>After receiving your reply, I test on the latest tracecompass. A >>> > >>folder named 'ctf' is showed instead of the expected file >>> > >>'ctf-data', this folder only contains the raw metadata and >>> > >>perf-stream files but not analysed. >>> > >CC-ing Alexandre from tracecompass devel ^^^ >>> > >>> > Hi, >>> > >>> > I just came back from vacation, sorry for not replying earlier! >>> > >>> > I managed to compile perf with CTF support, but by using Babeltrace's >>> > commit >>> > 5584a48. It fails to compile against current master, because of private >>> > headers getting exposed. I reported that to the BT maintainers. >>> >>> there's fix in babeltrace tree already >>> >>> > >>> > Then it seems there's another bug with Trace Compass's current master, >>> > trace >>> > validation cannot fail, and any file will get imported with no errors. We >>> > will look into this. >>> > But the root of the problem was that the converted CTF trace was not being >>> > recognized as valid. This is because some events define "stream_id = 0;", >>> > and others don't specify a stream_id at all. It seems quite random, see >>> > the >>> > full metadata here: http://pastebin.com/pACgV5JU >>> > >>> > Is there a reason why some events specify a stream_id and some don't? >>> >>> hum, that seems like a bug.. I'll check >>> >> >> ok, found the problem.. the "stream_id" event_class's attribute is created >> only when the instance of the event (not event_class) is created >> >> so you'll see the stream_id attribute only for events, that >> we actually got data for.. the rest is without, because >> their instance was never created >> >> seems to me like libbabeltrace bug, unless the application should >> take care about stream_id attribute.. but it's not the case for >> the rest of the 'internal' attributes.. Jeremie? > > According to the spec, the stream_id attribute can be left unspecified > if only one stream is defined. However, is seems Babeltrace's CTF-Writer > will leave the stream_id out of the event's declaration even when > multiple streams are defined. > > I'll submit a fix. > > Thanks. > Jérémie > >> >> anyway, I made a attached workaround and it all works nicely again, >> tracecompass is happy and shows the data properly >> >> I put all the pending ctf changes (plus the workaround) into: >> git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git >> perf/ctf branch >> >> jirka >> >> >> --- >> diff --git a/tools/perf/util/data-convert-bt.c >> b/tools/perf/util/data-convert-bt.c >> index 977cc3f98d8f..d7f03dcb1700 100644 >> --- a/tools/perf/util/data-convert-bt.c >> +++ b/tools/perf/util/data-convert-bt.c >> @@ -803,6 +803,7 @@ static int add_generic_types(struct ctf_writer *cw, >> struct perf_evsel *evsel, >> static int add_event(struct ctf_writer *cw, struct perf_evsel *evsel) >> { >> struct bt_ctf_event_class *event_class; >> + struct bt_ctf_event *event; >> struct evsel_priv *priv; >> const char *name = perf_evsel__name(evsel); >> int ret; >> @@ -833,6 +834,14 @@ static int add_event(struct ctf_writer *cw, struct >> perf_evsel *evsel) >> if (!priv) >> goto err; >> >> + event = bt_ctf_event_create(event_class); >> + if (!event) { >> + pr_err("Failed to create an CTF event\n"); >> + goto err; >> + } >> + >> + bt_ctf_event_put(event); >> + >> priv->event_class = event_class; >> evsel->priv = priv; >> return 0; > > > > -- > Jérémie Galarneau > EfficiOS Inc. > http://www.efficios.com -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/