summaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-record.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-11-14 16:56:32 +0900
committerLinus Torvalds <torvalds@linux-foundation.org>2013-11-14 16:56:32 +0900
commitfcd7476f9e03a36e709e0807198d47a826cc4e3a (patch)
tree1a9017988a864fae9ec62fd9e08e18cdc42d06cf /tools/perf/builtin-record.c
parentd320e203bad4cfcef3613e83a52f8c70a77e8a60 (diff)
parentd969135aae1434547f41853f0e8eaa622e8b8816 (diff)
downloadop-kernel-dev-fcd7476f9e03a36e709e0807198d47a826cc4e3a.zip
op-kernel-dev-fcd7476f9e03a36e709e0807198d47a826cc4e3a.tar.gz
Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf updates from Ingo Molnar: "A number of fixes: - Fix segfault on perf trace -i perf.data, from Namhyung Kim. - Fix segfault with --no-mmap-pages, from David Ahern. - Don't force a refresh during progress update in the TUI, greatly reducing startup costs, fix from Patrick Palka. - Fix sw clock event period test wrt not checking if using > max_sample_freq. - Handle throttle events in 'object code reading' test, fix from Adrian Hunter. - Prevent condition that all sort keys are elided, fix from Namhyung Kim. - Round mmap pages to power 2, from David Ahern. And a number of late arrival changes: - Add summary only option to 'perf trace', suppressing the decoding of events, from David Ahern - 'perf trace --summary' formatting simplifications, from Pekka Enberg. - Beautify fifth argument of mmap() as fd, in 'perf trace', from Namhyung Kim. - Add direct access to dynamic arrays in libtraceevent, from Steven Rostedt. - Synthesize non-exec MMAP records when --data used, allowing the resolution of data addresses to symbols (global variables, etc), by Arnaldo Carvalho de Melo. - Code cleanups by David Ahern and Adrian Hunter" * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (23 commits) tools lib traceevent: Add direct access to dynamic arrays perf target: Shorten perf_target__ to target__ perf tests: Handle throttle events in 'object code reading' test perf evlist: Refactor mmap_pages parsing perf evlist: Round mmap pages to power 2 - v2 perf record: Fix segfault with --no-mmap-pages perf trace: Add summary only option perf trace: Simplify '--summary' output perf trace: Change syscall summary duration order perf tests: Compensate lower sample freq with longer test loop perf trace: Fix segfault on perf trace -i perf.data perf trace: Separate tp syscall field caching into init routine to be reused perf trace: Beautify fifth argument of mmap() as fd perf tests: Use lower sample_freq in sw clock event period test perf tests: Check return of perf_evlist__open sw clock event period test perf record: Move existing write_output into helper function perf record: Use correct return type for write() perf tools: Prevent condition that all sort keys are elided perf machine: Simplify synthesize_threads method perf machine: Introduce synthesize_threads method out of open coded equivalent ...
Diffstat (limited to 'tools/perf/builtin-record.c')
-rw-r--r--tools/perf/builtin-record.c35
1 files changed, 16 insertions, 19 deletions
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 15280b5..4d644fe 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -76,12 +76,12 @@ struct perf_record {
long samples;
};
-static int write_output(struct perf_record *rec, void *buf, size_t size)
+static int do_write_output(struct perf_record *rec, void *buf, size_t size)
{
struct perf_data_file *file = &rec->file;
while (size) {
- int ret = write(file->fd, buf, size);
+ ssize_t ret = write(file->fd, buf, size);
if (ret < 0) {
pr_err("failed to write perf data, error: %m\n");
@@ -97,6 +97,11 @@ static int write_output(struct perf_record *rec, void *buf, size_t size)
return 0;
}
+static int write_output(struct perf_record *rec, void *buf, size_t size)
+{
+ return do_write_output(rec, buf, size);
+}
+
static int process_synthesized_event(struct perf_tool *tool,
union perf_event *event,
struct perf_sample *sample __maybe_unused,
@@ -480,16 +485,8 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
perf_event__synthesize_guest_os, tool);
}
- if (perf_target__has_task(&opts->target))
- err = perf_event__synthesize_thread_map(tool, evsel_list->threads,
- process_synthesized_event,
- machine);
- else if (perf_target__has_cpu(&opts->target))
- err = perf_event__synthesize_threads(tool, process_synthesized_event,
- machine);
- else /* command specified */
- err = 0;
-
+ err = __machine__synthesize_threads(machine, tool, &opts->target, evsel_list->threads,
+ process_synthesized_event, opts->sample_address);
if (err != 0)
goto out_delete_session;
@@ -509,7 +506,7 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
* (apart from group members) have enable_on_exec=1 set,
* so don't spoil it by prematurely enabling them.
*/
- if (!perf_target__none(&opts->target))
+ if (!target__none(&opts->target))
perf_evlist__enable(evsel_list);
/*
@@ -538,7 +535,7 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
* die with the process and we wait for that. Thus no need to
* disable events in this case.
*/
- if (done && !disabled && !perf_target__none(&opts->target)) {
+ if (done && !disabled && !target__none(&opts->target)) {
perf_evlist__disable(evsel_list);
disabled = true;
}
@@ -909,7 +906,7 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
argc = parse_options(argc, argv, record_options, record_usage,
PARSE_OPT_STOP_AT_NON_OPTION);
- if (!argc && perf_target__none(&rec->opts.target))
+ if (!argc && target__none(&rec->opts.target))
usage_with_options(record_usage, record_options);
if (nr_cgroups && !rec->opts.target.system_wide) {
@@ -939,17 +936,17 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
goto out_symbol_exit;
}
- err = perf_target__validate(&rec->opts.target);
+ err = target__validate(&rec->opts.target);
if (err) {
- perf_target__strerror(&rec->opts.target, err, errbuf, BUFSIZ);
+ target__strerror(&rec->opts.target, err, errbuf, BUFSIZ);
ui__warning("%s", errbuf);
}
- err = perf_target__parse_uid(&rec->opts.target);
+ err = target__parse_uid(&rec->opts.target);
if (err) {
int saved_errno = errno;
- perf_target__strerror(&rec->opts.target, err, errbuf, BUFSIZ);
+ target__strerror(&rec->opts.target, err, errbuf, BUFSIZ);
ui__error("%s", errbuf);
err = -saved_errno;
OpenPOWER on IntegriCloud