Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

perf json: Pipe mode --to-ctf support

In pipe mode the environment may not be fully initialized so be robust
to fields being NULL.

Add default handling of attr events, use the feature events to populate
the ctf writer environment.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Derek Foreman <derek.foreman@collabora.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Ian Rogers and committed by
Arnaldo Carvalho de Melo
5b92fc08 6db2f7c6

+52 -2
+52 -2
tools/perf/util/data-convert-bt.c
··· 35 35 #include "clockid.h" 36 36 #include "util/sample.h" 37 37 #include "util/time-utils.h" 38 + #include "header.h" 38 39 39 40 #ifdef HAVE_LIBTRACEEVENT 40 41 #include <event-parse.h> ··· 1339 1338 struct evsel_priv *priv; 1340 1339 1341 1340 priv = evsel->priv; 1342 - bt_ctf_event_class_put(priv->event_class); 1341 + if (priv) 1342 + bt_ctf_event_class_put(priv->event_class); 1343 1343 zfree(&evsel->priv); 1344 1344 } 1345 1345 ··· 1389 1387 1390 1388 #define ADD(__n, __v) \ 1391 1389 do { \ 1392 - if (bt_ctf_writer_add_environment_field(writer, __n, __v)) \ 1390 + if (__v && bt_ctf_writer_add_environment_field(writer, __n, __v)) \ 1393 1391 return -1; \ 1394 1392 } while (0) 1395 1393 ··· 1402 1400 ADD("tracer_name", "perf"); 1403 1401 1404 1402 #undef ADD 1403 + return 0; 1404 + } 1405 + 1406 + static int process_feature_event(const struct perf_tool *tool, 1407 + struct perf_session *session, 1408 + union perf_event *event) 1409 + { 1410 + struct convert *c = container_of(tool, struct convert, tool); 1411 + struct ctf_writer *cw = &c->writer; 1412 + struct perf_record_header_feature *fe = &event->feat; 1413 + 1414 + if (event->feat.feat_id < HEADER_LAST_FEATURE) { 1415 + int ret = perf_event__process_feature(session, event); 1416 + 1417 + if (ret) 1418 + return ret; 1419 + } 1420 + 1421 + switch (fe->feat_id) { 1422 + case HEADER_HOSTNAME: 1423 + if (session->header.env.hostname) { 1424 + return bt_ctf_writer_add_environment_field(cw->writer, "host", 1425 + session->header.env.hostname); 1426 + } 1427 + break; 1428 + case HEADER_OSRELEASE: 1429 + if (session->header.env.os_release) { 1430 + return bt_ctf_writer_add_environment_field(cw->writer, "release", 1431 + session->header.env.os_release); 1432 + } 1433 + break; 1434 + case HEADER_VERSION: 1435 + if (session->header.env.version) { 1436 + return bt_ctf_writer_add_environment_field(cw->writer, "version", 1437 + session->header.env.version); 1438 + } 1439 + break; 1440 + case HEADER_ARCH: 1441 + if (session->header.env.arch) { 1442 + return bt_ctf_writer_add_environment_field(cw->writer, "machine", 1443 + session->header.env.arch); 1444 + } 1445 + break; 1446 + default: 1447 + break; 1448 + } 1405 1449 return 0; 1406 1450 } 1407 1451 ··· 1683 1635 c.tool.tracing_data = perf_event__process_tracing_data; 1684 1636 c.tool.build_id = perf_event__process_build_id; 1685 1637 c.tool.namespaces = perf_event__process_namespaces; 1638 + c.tool.attr = perf_event__process_attr; 1639 + c.tool.feature = process_feature_event; 1686 1640 c.tool.ordering_requires_timestamps = true; 1687 1641 1688 1642 if (opts->all) {