diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 65f39fdf821a4e75b15d946c40ca0c5286b96ee5..94f6ba16747f111e6fbce69eebdd0660f9202c7e 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -53,7 +53,7 @@ struct perf_evsel { u64 *id; struct perf_counts *counts; int idx; - int ids; + u32 ids; struct hists hists; char *name; struct event_format *tp_format; diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 77832b807eff3d09825b3f16c7c904081cec4ba0..471b0c42db3f28573a86e8d3abc55ded2e3b19fe 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -2240,7 +2240,7 @@ int perf_session__read_header(struct perf_session *session, int fd) } int perf_event__synthesize_attr(struct perf_tool *tool, - struct perf_event_attr *attr, u16 ids, u64 *id, + struct perf_event_attr *attr, u32 ids, u64 *id, perf_event__handler_t process) { union perf_event *ev; @@ -2261,9 +2261,12 @@ int perf_event__synthesize_attr(struct perf_tool *tool, memcpy(ev->attr.id, id, ids * sizeof(u64)); ev->attr.header.type = PERF_RECORD_HEADER_ATTR; - ev->attr.header.size = size; + ev->attr.header.size = (u16)size; - err = process(tool, ev, NULL, NULL); + if (ev->attr.header.size == size) + err = process(tool, ev, NULL, NULL); + else + err = -E2BIG; free(ev); @@ -2292,7 +2295,7 @@ int perf_event__synthesize_attrs(struct perf_tool *tool, int perf_event__process_attr(union perf_event *event, struct perf_evlist **pevlist) { - unsigned int i, ids, n_ids; + u32 i, ids, n_ids; struct perf_evsel *evsel; struct perf_evlist *evlist = *pevlist; diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h index 2d42b3e1826ff998534b3f949b48fc7c902bc0a1..24962e707e5bd3148bba741bb4a108b910989266 100644 --- a/tools/perf/util/header.h +++ b/tools/perf/util/header.h @@ -99,7 +99,7 @@ int build_id_cache__add_s(const char *sbuild_id, const char *debugdir, int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir); int perf_event__synthesize_attr(struct perf_tool *tool, - struct perf_event_attr *attr, u16 ids, u64 *id, + struct perf_event_attr *attr, u32 ids, u64 *id, perf_event__handler_t process); int perf_event__synthesize_attrs(struct perf_tool *tool, struct perf_session *session,