perf_get_group_nevents was returning the wrong number of events when the group was the last in the list - it always returned 1 instead of the true number.
Also, when reading up event groups, only a "max size" (sz) was being passed to the read() function, which resulted in getting fewer bytes than requested and a resulting warning when groups with fewer events follow groups with more events. Signed-off-by: Corey Ashford <cjash...@linux.vnet.ibm.com> --- perf_examples/perf_util.c | 2 +- perf_examples/task.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/perf_examples/perf_util.c b/perf_examples/perf_util.c index 9c99b15..b84f0e2 100644 --- a/perf_examples/perf_util.c +++ b/perf_examples/perf_util.c @@ -161,7 +161,7 @@ perf_get_group_nevents(perf_event_desc_t *fds, int num, int idx) return i - leader; } } - return 1; + return i - leader; } int diff --git a/perf_examples/task.c b/perf_examples/task.c index c66e3ed..75de973 100644 --- a/perf_examples/task.c +++ b/perf_examples/task.c @@ -99,14 +99,14 @@ read_groups(perf_event_desc_t *fds, int num) if (!values) err(1, "cannot allocate memory for values\n"); - ret = read(fds[evt].fd, values, sz); - if (ret != sz) { /* unsigned */ + ret = read(fds[evt].fd, values, new_sz); + if (ret != new_sz) { /* unsigned */ if (ret == -1) err(1, "cannot read values event %s", fds[evt].name); /* likely pinned and could not be loaded */ warnx("could not read event %d, tried to read %d bytes, but got %d", - evt, (int)sz, ret); + evt, (int)new_sz, ret); } /* -- 1.7.0.4 ------------------------------------------------------------------------------ _______________________________________________ perfmon2-devel mailing list perfmon2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perfmon2-devel