Since the event descriptions are saved already in the header, do not
write them to the feature section.

Cc: Stephane Eranian <[email protected]>
Signed-off-by: Namhyung Kim <[email protected]>
---
 tools/perf/util/header.c |  154 +++++++---------------------------------------
 1 file changed, 21 insertions(+), 133 deletions(-)

diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index 5a47aba46759..193aa089f9a6 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -596,61 +596,9 @@ static int write_nrcpus(int fd, struct perf_header *h 
__used,
        return do_write(fd, &nra, sizeof(nra));
 }
 
-static int write_event_desc(int fd, struct perf_header *h __used,
-                           struct perf_evlist *evlist)
+static int write_event_desc(int fd __used, struct perf_header *h __used,
+                           struct perf_evlist *evlist __used)
 {
-       struct perf_evsel *attr;
-       u32 nre = 0, nri, sz;
-       int ret;
-
-       list_for_each_entry(attr, &evlist->entries, node)
-               nre++;
-
-       /*
-        * write number of events
-        */
-       ret = do_write(fd, &nre, sizeof(nre));
-       if (ret < 0)
-               return ret;
-
-       /*
-        * size of perf_event_attr struct
-        */
-       sz = (u32)sizeof(attr->attr);
-       ret = do_write(fd, &sz, sizeof(sz));
-       if (ret < 0)
-               return ret;
-
-       list_for_each_entry(attr, &evlist->entries, node) {
-
-               ret = do_write(fd, &attr->attr, sz);
-               if (ret < 0)
-                       return ret;
-               /*
-                * write number of unique id per event
-                * there is one id per instance of an event
-                *
-                * copy into an nri to be independent of the
-                * type of ids,
-                */
-               nri = attr->ids;
-               ret = do_write(fd, &nri, sizeof(nri));
-               if (ret < 0)
-                       return ret;
-
-               /*
-                * write event string as passed on cmdline
-                */
-               ret = do_write_string(fd, perf_evsel__name(attr));
-               if (ret < 0)
-                       return ret;
-               /*
-                * write unique ids for this event
-                */
-               ret = do_write(fd, attr->id, attr->ids * sizeof(u64));
-               if (ret < 0)
-                       return ret;
-       }
        return 0;
 }
 
@@ -1139,103 +1087,43 @@ static void print_cpu_topology(struct perf_header *ph, 
int fd, FILE *fp)
        }
 }
 
-static void print_event_desc(struct perf_header *ph, int fd, FILE *fp)
+static void print_event_desc(struct perf_header *ph, int fd __used, FILE *fp)
 {
-       struct perf_event_attr attr;
-       uint64_t id;
-       void *buf = NULL;
-       char *str;
-       u32 nre, sz, nr, i, j;
-       ssize_t ret;
-       size_t msz;
-
-       /* number of events */
-       ret = read(fd, &nre, sizeof(nre));
-       if (ret != (ssize_t)sizeof(nre))
-               goto error;
-
-       if (ph->needs_swap)
-               nre = bswap_32(nre);
-
-       ret = read(fd, &sz, sizeof(sz));
-       if (ret != (ssize_t)sizeof(sz))
-               goto error;
-
-       if (ph->needs_swap)
-               sz = bswap_32(sz);
-
-       memset(&attr, 0, sizeof(attr));
-
-       /* buffer to hold on file attr struct */
-       buf = malloc(sz);
-       if (!buf)
-               goto error;
-
-       msz = sizeof(attr);
-       if (sz < msz)
-               msz = sz;
-
-       for (i = 0 ; i < nre; i++) {
-
-               /*
-                * must read entire on-file attr struct to
-                * sync up with layout.
-                */
-               ret = read(fd, buf, sz);
-               if (ret != (ssize_t)sz)
-                       goto error;
-
-               if (ph->needs_swap)
-                       perf_event__attr_swap(buf);
+       struct perf_session *session;
+       struct perf_evsel *evsel;
+       int i;
 
-               memcpy(&attr, buf, msz);
+       session = container_of(ph, struct perf_session, header);
 
-               ret = read(fd, &nr, sizeof(nr));
-               if (ret != (ssize_t)sizeof(nr))
-                       goto error;
+       list_for_each_entry(evsel, &session->evlist->entries, node) {
+               struct perf_event_attr *attr = &evsel->attr;
 
-               if (ph->needs_swap)
-                       nr = bswap_32(nr);
-
-               str = do_read_string(fd, ph);
-               fprintf(fp, "# event : name = %s, ", str);
-               free(str);
+               fprintf(fp, "# event : name = %s, ", perf_evsel__name(evsel));
 
                fprintf(fp, "type = %d, config = 0x%"PRIx64
                            ", config1 = 0x%"PRIx64", config2 = 0x%"PRIx64,
-                               attr.type,
-                               (u64)attr.config,
-                               (u64)attr.config1,
-                               (u64)attr.config2);
+                               attr->type,
+                               (u64)attr->config,
+                               (u64)attr->config1,
+                               (u64)attr->config2);
 
                fprintf(fp, ", excl_usr = %d, excl_kern = %d",
-                               attr.exclude_user,
-                               attr.exclude_kernel);
+                               attr->exclude_user,
+                               attr->exclude_kernel);
 
-               if (nr)
+               if (evsel->ids)
                        fprintf(fp, ", id = {");
 
-               for (j = 0 ; j < nr; j++) {
-                       ret = read(fd, &id, sizeof(id));
-                       if (ret != (ssize_t)sizeof(id))
-                               goto error;
-
-                       if (ph->needs_swap)
-                               id = bswap_64(id);
-
-                       if (j)
+               for (i = 0 ; i < evsel->ids; i++) {
+                       if (i)
                                fputc(',', fp);
 
-                       fprintf(fp, " %"PRIu64, id);
+                       fprintf(fp, " %"PRIu64, evsel->id[i]);
                }
-               if (nr && j == nr)
+               if (evsel->ids && i == evsel->ids)
                        fprintf(fp, " }");
                fputc('\n', fp);
        }
-       free(buf);
-       return;
-error:
-       fprintf(fp, "# event desc: not available or unable to read\n");
 }
 
 static void print_total_mem(struct perf_header *h __used, int fd, FILE *fp)
-- 
1.7.9.2

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to