diff options
author | Wang Nan <wangnan0@huawei.com> | 2016-06-27 06:24:03 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-06-28 09:54:53 -0400 |
commit | cda57a8c74aa326cbb1a1e2f7d30f8c76983e70c (patch) | |
tree | a78956a34d589b5b4196225d371a0234f6f0b870 | |
parent | f6c12a004c149a7b0ea1332fa715979888dd4695 (diff) |
perf record: Move mmap setup block to separate function
Following commits introduce multiple evlists to record. This patch
extracts perf_evlist__mmap_ex() processing to a new function, creates
record__mmap() and record__mmap_evlist() to wrap perf_evlist__mmap_ex()
and its error processing. They will be improvemented to create mmap for
all evlists.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: He Kuang <hekuang@huawei.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Nilay Vaish <nilayvaish@gmail.com>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1467023052-146749-2-git-send-email-wangnan0@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r-- | tools/perf/builtin-record.c | 56 |
1 files changed, 36 insertions, 20 deletions
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 81411b14df4c..7eb8d7d29fbc 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c | |||
@@ -342,6 +342,40 @@ int auxtrace_record__snapshot_start(struct auxtrace_record *itr __maybe_unused) | |||
342 | 342 | ||
343 | #endif | 343 | #endif |
344 | 344 | ||
345 | static int record__mmap_evlist(struct record *rec, | ||
346 | struct perf_evlist *evlist) | ||
347 | { | ||
348 | struct record_opts *opts = &rec->opts; | ||
349 | char msg[512]; | ||
350 | |||
351 | if (perf_evlist__mmap_ex(evlist, opts->mmap_pages, false, | ||
352 | opts->auxtrace_mmap_pages, | ||
353 | opts->auxtrace_snapshot_mode) < 0) { | ||
354 | if (errno == EPERM) { | ||
355 | pr_err("Permission error mapping pages.\n" | ||
356 | "Consider increasing " | ||
357 | "/proc/sys/kernel/perf_event_mlock_kb,\n" | ||
358 | "or try again with a smaller value of -m/--mmap_pages.\n" | ||
359 | "(current value: %u,%u)\n", | ||
360 | opts->mmap_pages, opts->auxtrace_mmap_pages); | ||
361 | return -errno; | ||
362 | } else { | ||
363 | pr_err("failed to mmap with %d (%s)\n", errno, | ||
364 | strerror_r(errno, msg, sizeof(msg))); | ||
365 | if (errno) | ||
366 | return -errno; | ||
367 | else | ||
368 | return -EINVAL; | ||
369 | } | ||
370 | } | ||
371 | return 0; | ||
372 | } | ||
373 | |||
374 | static int record__mmap(struct record *rec) | ||
375 | { | ||
376 | return record__mmap_evlist(rec, rec->evlist); | ||
377 | } | ||
378 | |||
345 | static int record__open(struct record *rec) | 379 | static int record__open(struct record *rec) |
346 | { | 380 | { |
347 | char msg[512]; | 381 | char msg[512]; |
@@ -378,27 +412,9 @@ try_again: | |||
378 | goto out; | 412 | goto out; |
379 | } | 413 | } |
380 | 414 | ||
381 | if (perf_evlist__mmap_ex(evlist, opts->mmap_pages, false, | 415 | rc = record__mmap(rec); |
382 | opts->auxtrace_mmap_pages, | 416 | if (rc) |
383 | opts->auxtrace_snapshot_mode) < 0) { | ||
384 | if (errno == EPERM) { | ||
385 | pr_err("Permission error mapping pages.\n" | ||
386 | "Consider increasing " | ||
387 | "/proc/sys/kernel/perf_event_mlock_kb,\n" | ||
388 | "or try again with a smaller value of -m/--mmap_pages.\n" | ||
389 | "(current value: %u,%u)\n", | ||
390 | opts->mmap_pages, opts->auxtrace_mmap_pages); | ||
391 | rc = -errno; | ||
392 | } else { | ||
393 | pr_err("failed to mmap with %d (%s)\n", errno, | ||
394 | strerror_r(errno, msg, sizeof(msg))); | ||
395 | if (errno) | ||
396 | rc = -errno; | ||
397 | else | ||
398 | rc = -EINVAL; | ||
399 | } | ||
400 | goto out; | 417 | goto out; |
401 | } | ||
402 | 418 | ||
403 | session->evlist = evlist; | 419 | session->evlist = evlist; |
404 | perf_session__set_id_hdr_size(session); | 420 | perf_session__set_id_hdr_size(session); |