Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / tools / perf / builtin-record.c
index 22ebeb92ac51d9d0f60b26772e44f427e284c230..0980dfe3396b188c3dd5692ad673bae137cb357c 100644 (file)
@@ -106,9 +106,12 @@ static bool switch_output_time(struct record *rec)
               trigger_is_ready(&switch_output_trigger);
 }
 
-static int record__write(struct record *rec, void *bf, size_t size)
+static int record__write(struct record *rec, struct perf_mmap *map __maybe_unused,
+                        void *bf, size_t size)
 {
-       if (perf_data__write(rec->session->data, bf, size) < 0) {
+       struct perf_data_file *file = &rec->session->data->file;
+
+       if (perf_data_file__write(file, bf, size) < 0) {
                pr_err("failed to write perf data, error: %m\n");
                return -1;
        }
@@ -127,15 +130,15 @@ static int process_synthesized_event(struct perf_tool *tool,
                                     struct machine *machine __maybe_unused)
 {
        struct record *rec = container_of(tool, struct record, tool);
-       return record__write(rec, event, event->header.size);
+       return record__write(rec, NULL, event, event->header.size);
 }
 
-static int record__pushfn(void *to, void *bf, size_t size)
+static int record__pushfn(struct perf_mmap *map, void *to, void *bf, size_t size)
 {
        struct record *rec = to;
 
        rec->samples++;
-       return record__write(rec, bf, size);
+       return record__write(rec, map, bf, size);
 }
 
 static volatile int done;
@@ -170,6 +173,7 @@ static void record__sig_exit(void)
 #ifdef HAVE_AUXTRACE_SUPPORT
 
 static int record__process_auxtrace(struct perf_tool *tool,
+                                   struct perf_mmap *map,
                                    union perf_event *event, void *data1,
                                    size_t len1, void *data2, size_t len2)
 {
@@ -197,21 +201,21 @@ static int record__process_auxtrace(struct perf_tool *tool,
        if (padding)
                padding = 8 - padding;
 
-       record__write(rec, event, event->header.size);
-       record__write(rec, data1, len1);
+       record__write(rec, map, event, event->header.size);
+       record__write(rec, map, data1, len1);
        if (len2)
-               record__write(rec, data2, len2);
-       record__write(rec, &pad, padding);
+               record__write(rec, map, data2, len2);
+       record__write(rec, map, &pad, padding);
 
        return 0;
 }
 
 static int record__auxtrace_mmap_read(struct record *rec,
-                                     struct auxtrace_mmap *mm)
+                                     struct perf_mmap *map)
 {
        int ret;
 
-       ret = auxtrace_mmap__read(mm, rec->itr, &rec->tool,
+       ret = auxtrace_mmap__read(map, rec->itr, &rec->tool,
                                  record__process_auxtrace);
        if (ret < 0)
                return ret;
@@ -223,11 +227,11 @@ static int record__auxtrace_mmap_read(struct record *rec,
 }
 
 static int record__auxtrace_mmap_read_snapshot(struct record *rec,
-                                              struct auxtrace_mmap *mm)
+                                              struct perf_mmap *map)
 {
        int ret;
 
-       ret = auxtrace_mmap__read_snapshot(mm, rec->itr, &rec->tool,
+       ret = auxtrace_mmap__read_snapshot(map, rec->itr, &rec->tool,
                                           record__process_auxtrace,
                                           rec->opts.auxtrace_snapshot_size);
        if (ret < 0)
@@ -245,13 +249,12 @@ static int record__auxtrace_read_snapshot_all(struct record *rec)
        int rc = 0;
 
        for (i = 0; i < rec->evlist->nr_mmaps; i++) {
-               struct auxtrace_mmap *mm =
-                               &rec->evlist->mmap[i].auxtrace_mmap;
+               struct perf_mmap *map = &rec->evlist->mmap[i];
 
-               if (!mm->base)
+               if (!map->auxtrace_mmap.base)
                        continue;
 
-               if (record__auxtrace_mmap_read_snapshot(rec, mm) != 0) {
+               if (record__auxtrace_mmap_read_snapshot(rec, map) != 0) {
                        rc = -1;
                        goto out;
                }
@@ -295,7 +298,7 @@ static int record__auxtrace_init(struct record *rec)
 
 static inline
 int record__auxtrace_mmap_read(struct record *rec __maybe_unused,
-                              struct auxtrace_mmap *mm __maybe_unused)
+                              struct perf_mmap *map __maybe_unused)
 {
        return 0;
 }
@@ -529,17 +532,17 @@ static int record__mmap_read_evlist(struct record *rec, struct perf_evlist *evli
                return 0;
 
        for (i = 0; i < evlist->nr_mmaps; i++) {
-               struct auxtrace_mmap *mm = &maps[i].auxtrace_mmap;
+               struct perf_mmap *map = &maps[i];
 
-               if (maps[i].base) {
-                       if (perf_mmap__push(&maps[i], rec, record__pushfn) != 0) {
+               if (map->base) {
+                       if (perf_mmap__push(map, rec, record__pushfn) != 0) {
                                rc = -1;
                                goto out;
                        }
                }
 
-               if (mm->base && !rec->opts.auxtrace_snapshot_mode &&
-                   record__auxtrace_mmap_read(rec, mm) != 0) {
+               if (map->auxtrace_mmap.base && !rec->opts.auxtrace_snapshot_mode &&
+                   record__auxtrace_mmap_read(rec, map) != 0) {
                        rc = -1;
                        goto out;
                }
@@ -550,7 +553,7 @@ static int record__mmap_read_evlist(struct record *rec, struct perf_evlist *evli
         * at least one event.
         */
        if (bytes_written != rec->bytes_written)
-               rc = record__write(rec, &finished_round_event, sizeof(finished_round_event));
+               rc = record__write(rec, NULL, &finished_round_event, sizeof(finished_round_event));
 
        if (overwrite)
                perf_evlist__toggle_bkw_mmap(evlist, BKW_MMAP_EMPTY);
@@ -758,7 +761,7 @@ static int record__synthesize(struct record *rec, bool tail)
                 * We need to synthesize events first, because some
                 * features works on top of them (on report side).
                 */
-               err = perf_event__synthesize_attrs(tool, session,
+               err = perf_event__synthesize_attrs(tool, rec->evlist,
                                                   process_synthesized_event);
                if (err < 0) {
                        pr_err("Couldn't synthesize attrs.\n");