mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
perf header: In pipe mode dump features without --header/-I
In pipe mode the header features are contained within events. While other events dump details the header features only dump if --header or -I are passed, which doesn't make sense as in pipe mode there is no perf file header. Make the printing of the information conditional on dump_trace as with other events. Before: ``` $ perf record -o - -a sleep 1 | perf script -D -i - ... 0x2c8@pipe [0x54]: event: 80 . . ... raw event: size 84 bytes . 0000: 50 00 00 00 00 00 54 00 05 00 00 00 00 00 00 00 P.....T......... . 0010: 40 00 00 00 36 2e 31 35 2e 72 63 37 2e 67 61 64 @...6.15.rc7.gad . 0020: 32 61 36 39 31 63 39 39 66 62 00 00 00 00 00 00 2a691c99fb...... . 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ . 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ . 0050: 00 00 00 00 .... 0 0 0x2c8 [0x54]: PERF_RECORD_FEATURE ``` After: ``` $ perf record -o - -a sleep 1 | perf script -D -i - ... 0x2c8@pipe [0x54]: event: 80 . . ... raw event: size 84 bytes . 0000: 50 00 00 00 00 00 54 00 05 00 00 00 00 00 00 00 P.....T......... . 0010: 40 00 00 00 36 2e 31 35 2e 72 63 37 2e 67 61 64 @...6.15.rc7.gad . 0020: 32 61 36 39 31 63 39 39 66 62 00 00 00 00 00 00 2a691c99fb...... . 0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ . 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ . 0050: 00 00 00 00 .... 0 0 0x2c8 [0x54]: PERF_RECORD_FEATURE, # perf version : 6.15.rc7.gad2a691c99fb ``` Signed-off-by: Ian Rogers <irogers@google.com> Link: https://lore.kernel.org/r/20250617223356.2752099-4-irogers@google.com Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This commit is contained in:
parent
45cd84bd7a
commit
61051f9a84
1 changed files with 8 additions and 14 deletions
|
@ -4326,7 +4326,6 @@ out_delete_evlist:
|
||||||
int perf_event__process_feature(struct perf_session *session,
|
int perf_event__process_feature(struct perf_session *session,
|
||||||
union perf_event *event)
|
union perf_event *event)
|
||||||
{
|
{
|
||||||
const struct perf_tool *tool = session->tool;
|
|
||||||
struct feat_fd ff = { .fd = 0 };
|
struct feat_fd ff = { .fd = 0 };
|
||||||
struct perf_record_header_feature *fe = (struct perf_record_header_feature *)event;
|
struct perf_record_header_feature *fe = (struct perf_record_header_feature *)event;
|
||||||
int type = fe->header.type;
|
int type = fe->header.type;
|
||||||
|
@ -4342,28 +4341,23 @@ int perf_event__process_feature(struct perf_session *session,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!feat_ops[feat].process)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
ff.buf = (void *)fe->data;
|
ff.buf = (void *)fe->data;
|
||||||
ff.size = event->header.size - sizeof(*fe);
|
ff.size = event->header.size - sizeof(*fe);
|
||||||
ff.ph = &session->header;
|
ff.ph = &session->header;
|
||||||
|
|
||||||
if (feat_ops[feat].process(&ff, NULL)) {
|
if (feat_ops[feat].process && feat_ops[feat].process(&ff, NULL)) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!feat_ops[feat].print || !tool->show_feat_hdr)
|
if (dump_trace) {
|
||||||
goto out;
|
printf(", ");
|
||||||
|
if (feat_ops[feat].print)
|
||||||
if (!feat_ops[feat].full_only ||
|
feat_ops[feat].print(&ff, stdout);
|
||||||
tool->show_feat_hdr >= SHOW_FEAT_HEADER_FULL_INFO) {
|
else
|
||||||
feat_ops[feat].print(&ff, stdout);
|
printf("# %s", feat_ops[feat].name);
|
||||||
} else {
|
|
||||||
fprintf(stdout, "# %s info available, use -I to display\n",
|
|
||||||
feat_ops[feat].name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
free_event_desc(ff.events);
|
free_event_desc(ff.events);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Add table
Reference in a new issue