diff options
Diffstat (limited to 'tools/perf/builtin-kvm.c')
-rw-r--r-- | tools/perf/builtin-kvm.c | 50 |
1 files changed, 20 insertions, 30 deletions
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index f8bf5f2..fbc2888 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -17,12 +17,9 @@ #include "util/tool.h" #include "util/stat.h" #include "util/top.h" -#include "util/data.h" #include <sys/prctl.h> -#ifdef HAVE_TIMERFD_SUPPORT #include <sys/timerfd.h> -#endif #include <termios.h> #include <semaphore.h> @@ -339,7 +336,6 @@ static void init_kvm_event_record(struct perf_kvm_stat *kvm) INIT_LIST_HEAD(&kvm->kvm_events_cache[i]); } -#ifdef HAVE_TIMERFD_SUPPORT static void clear_events_cache_stats(struct list_head *kvm_events_cache) { struct list_head *head; @@ -361,7 +357,6 @@ static void clear_events_cache_stats(struct list_head *kvm_events_cache) } } } -#endif static int kvm_events_hash_fn(u64 key) { @@ -787,7 +782,6 @@ static void print_result(struct perf_kvm_stat *kvm) pr_info("\nLost events: %" PRIu64 "\n\n", kvm->lost_events); } -#ifdef HAVE_TIMERFD_SUPPORT static int process_lost_event(struct perf_tool *tool, union perf_event *event __maybe_unused, struct perf_sample *sample __maybe_unused, @@ -798,7 +792,6 @@ static int process_lost_event(struct perf_tool *tool, kvm->lost_events++; return 0; } -#endif static bool skip_sample(struct perf_kvm_stat *kvm, struct perf_sample *sample) @@ -878,7 +871,6 @@ static bool verify_vcpu(int vcpu) return true; } -#ifdef HAVE_TIMERFD_SUPPORT /* keeping the max events to a modest level to keep * the processing of samples per mmap smooth. */ @@ -1220,7 +1212,6 @@ static int kvm_live_open_events(struct perf_kvm_stat *kvm) out: return rc; } -#endif static int read_events(struct perf_kvm_stat *kvm) { @@ -1231,13 +1222,10 @@ static int read_events(struct perf_kvm_stat *kvm) .comm = perf_event__process_comm, .ordered_samples = true, }; - struct perf_data_file file = { - .path = input_name, - .mode = PERF_DATA_MODE_READ, - }; kvm->tool = eops; - kvm->session = perf_session__new(&file, false, &kvm->tool); + kvm->session = perf_session__new(kvm->file_name, O_RDONLY, 0, false, + &kvm->tool); if (!kvm->session) { pr_err("Initializing perf session failed\n"); return -EINVAL; @@ -1387,7 +1375,6 @@ kvm_events_report(struct perf_kvm_stat *kvm, int argc, const char **argv) return kvm_events_report_vcpu(kvm); } -#ifdef HAVE_TIMERFD_SUPPORT static struct perf_evlist *kvm_live_event_list(void) { struct perf_evlist *evlist; @@ -1446,9 +1433,8 @@ static int kvm_events_live(struct perf_kvm_stat *kvm, const struct option live_options[] = { OPT_STRING('p', "pid", &kvm->opts.target.pid, "pid", "record events on existing process id"), - OPT_CALLBACK('m', "mmap-pages", &kvm->opts.mmap_pages, "pages", - "number of mmap data pages", - perf_evlist__parse_mmap_pages), + OPT_UINTEGER('m', "mmap-pages", &kvm->opts.mmap_pages, + "number of mmap data pages"), OPT_INCR('v', "verbose", &verbose, "be more verbose (show counter open errors, etc)"), OPT_BOOLEAN('a', "all-cpus", &kvm->opts.target.system_wide, @@ -1470,9 +1456,6 @@ static int kvm_events_live(struct perf_kvm_stat *kvm, "perf kvm stat live [<options>]", NULL }; - struct perf_data_file file = { - .mode = PERF_DATA_MODE_WRITE, - }; /* event handling */ @@ -1510,13 +1493,13 @@ static int kvm_events_live(struct perf_kvm_stat *kvm, /* * target related setups */ - err = target__validate(&kvm->opts.target); + err = perf_target__validate(&kvm->opts.target); if (err) { - target__strerror(&kvm->opts.target, err, errbuf, BUFSIZ); + perf_target__strerror(&kvm->opts.target, err, errbuf, BUFSIZ); ui__warning("%s", errbuf); } - if (target__none(&kvm->opts.target)) + if (perf_target__none(&kvm->opts.target)) kvm->opts.target.system_wide = true; @@ -1537,15 +1520,25 @@ static int kvm_events_live(struct perf_kvm_stat *kvm, /* * perf session */ - kvm->session = perf_session__new(&file, false, &kvm->tool); + kvm->session = perf_session__new(NULL, O_WRONLY, false, false, &kvm->tool); if (kvm->session == NULL) { err = -ENOMEM; goto out; } kvm->session->evlist = kvm->evlist; perf_session__set_id_hdr_size(kvm->session); - machine__synthesize_threads(&kvm->session->machines.host, &kvm->opts.target, - kvm->evlist->threads, false); + + + if (perf_target__has_task(&kvm->opts.target)) + perf_event__synthesize_thread_map(&kvm->tool, + kvm->evlist->threads, + perf_event__process, + &kvm->session->machines.host); + else + perf_event__synthesize_threads(&kvm->tool, perf_event__process, + &kvm->session->machines.host); + + err = kvm_live_open_events(kvm); if (err) goto out; @@ -1565,7 +1558,6 @@ out: return err; } -#endif static void print_kvm_stat_usage(void) { @@ -1604,10 +1596,8 @@ static int kvm_cmd_stat(const char *file_name, int argc, const char **argv) if (!strncmp(argv[1], "rep", 3)) return kvm_events_report(&kvm, argc - 1 , argv + 1); -#ifdef HAVE_TIMERFD_SUPPORT if (!strncmp(argv[1], "live", 4)) return kvm_events_live(&kvm, argc - 1 , argv + 1); -#endif perf_stat: return cmd_stat(argc, argv, NULL); |