Commit ded2b8fe authored by Jiri Olsa's avatar Jiri Olsa Committed by Arnaldo Carvalho de Melo
Browse files

perf tools: Add 'struct perf_mmap' arg to record__write()



The struct perf_mmap map argument will hold the file pointer to write
the data to.

Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20180913125450.21342-5-jolsa@kernel.org


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent e035f4ca
Loading
Loading
Loading
Loading
+14 −10
Original line number Diff line number Diff line
@@ -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,11 +201,11 @@ 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;
}
@@ -549,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);
+1 −1
Original line number Diff line number Diff line
@@ -1285,7 +1285,7 @@ static int __auxtrace_mmap__read(struct perf_mmap *map,
	ev.auxtrace.tid = mm->tid;
	ev.auxtrace.cpu = mm->cpu;

	if (fn(tool, &ev, data1, len1, data2, len2))
	if (fn(tool, map, &ev, data1, len1, data2, len2))
		return -1;

	mm->prev = head;
+1 −0
Original line number Diff line number Diff line
@@ -435,6 +435,7 @@ void auxtrace_mmap_params__set_idx(struct auxtrace_mmap_params *mp,
				   bool per_cpu);

typedef int (*process_auxtrace_t)(struct perf_tool *tool,
				  struct perf_mmap *map,
				  union perf_event *event, void *data1,
				  size_t len1, void *data2, size_t len2);

+3 −3
Original line number Diff line number Diff line
@@ -281,7 +281,7 @@ int perf_mmap__read_init(struct perf_mmap *map)
}

int perf_mmap__push(struct perf_mmap *md, void *to,
		    int push(void *to, void *buf, size_t size))
		    int push(struct perf_mmap *map, void *to, void *buf, size_t size))
{
	u64 head = perf_mmap__read_head(md);
	unsigned char *data = md->base + page_size;
@@ -300,7 +300,7 @@ int perf_mmap__push(struct perf_mmap *md, void *to,
		size = md->mask + 1 - (md->start & md->mask);
		md->start += size;

		if (push(to, buf, size) < 0) {
		if (push(md, to, buf, size) < 0) {
			rc = -1;
			goto out;
		}
@@ -310,7 +310,7 @@ int perf_mmap__push(struct perf_mmap *md, void *to,
	size = md->end - md->start;
	md->start += size;

	if (push(to, buf, size) < 0) {
	if (push(md, to, buf, size) < 0) {
		rc = -1;
		goto out;
	}
+1 −1
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ union perf_event *perf_mmap__read_forward(struct perf_mmap *map);
union perf_event *perf_mmap__read_event(struct perf_mmap *map);

int perf_mmap__push(struct perf_mmap *md, void *to,
		    int push(void *to, void *buf, size_t size));
		    int push(struct perf_mmap *map, void *to, void *buf, size_t size));

size_t perf_mmap__mmap_len(struct perf_mmap *map);