]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - tools/perf/builtin-kvm.c
perf tools: Rename perf_evlist__mmap() to evlist__mmap()
[linux.git] / tools / perf / builtin-kvm.c
index cf8f27d052960c1995a770aa3fec371bef22b048..72debb7bd20d18bb8aff478cdb99d609adef10c8 100644 (file)
@@ -2,23 +2,27 @@
 #include "builtin.h"
 #include "perf.h"
 
+#include "util/build-id.h"
 #include "util/evsel.h"
 #include "util/evlist.h"
 #include "util/term.h"
-#include "util/cache.h"
 #include "util/symbol.h"
 #include "util/thread.h"
 #include "util/header.h"
 #include "util/session.h"
 #include "util/intlist.h"
+#include <subcmd/pager.h>
 #include <subcmd/parse-options.h>
 #include "util/trace-event.h"
 #include "util/debug.h"
 #include "util/tool.h"
 #include "util/stat.h"
+#include "util/synthetic-events.h"
 #include "util/top.h"
 #include "util/data.h"
 #include "util/ordered-events.h"
+#include "util/kvm-stat.h"
+#include "ui/ui.h"
 
 #include <sys/prctl.h>
 #ifdef HAVE_TIMERFD_SUPPORT
@@ -29,7 +33,9 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 
+#include <linux/err.h>
 #include <linux/kernel.h>
+#include <linux/string.h>
 #include <linux/time64.h>
 #include <linux/zalloc.h>
 #include <errno.h>
@@ -55,7 +61,6 @@ static const char *get_filename_for_perf_kvm(void)
 }
 
 #ifdef HAVE_KVM_STAT_SUPPORT
-#include "util/kvm-stat.h"
 
 void exit_event_get_key(struct evsel *evsel,
                        struct perf_sample *sample,
@@ -743,9 +748,9 @@ static bool verify_vcpu(int vcpu)
 static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx,
                                   u64 *mmap_time)
 {
-       struct perf_evlist *evlist = kvm->evlist;
+       struct evlist *evlist = kvm->evlist;
        union perf_event *event;
-       struct perf_mmap *md;
+       struct mmap *md;
        u64 timestamp;
        s64 n = 0;
        int err;
@@ -972,7 +977,7 @@ static int kvm_events_live_report(struct perf_kvm_stat *kvm)
                goto out;
 
        /* everything is good - enable the events and process */
-       perf_evlist__enable(kvm->evlist);
+       evlist__enable(kvm->evlist);
 
        while (!done) {
                struct fdarray *fda = &kvm->evlist->pollfd;
@@ -993,7 +998,7 @@ static int kvm_events_live_report(struct perf_kvm_stat *kvm)
                        err = fdarray__poll(fda, 100);
        }
 
-       perf_evlist__disable(kvm->evlist);
+       evlist__disable(kvm->evlist);
 
        if (err == 0) {
                sort_result(kvm);
@@ -1012,7 +1017,7 @@ static int kvm_live_open_events(struct perf_kvm_stat *kvm)
 {
        int err, rc = -1;
        struct evsel *pos;
-       struct perf_evlist *evlist = kvm->evlist;
+       struct evlist *evlist = kvm->evlist;
        char sbuf[STRERR_BUFSIZE];
 
        perf_evlist__config(evlist, &kvm->opts, NULL);
@@ -1022,7 +1027,7 @@ static int kvm_live_open_events(struct perf_kvm_stat *kvm)
         *       This command processes KVM tracepoints from host only
         */
        evlist__for_each_entry(evlist, pos) {
-               struct perf_event_attr *attr = &pos->attr;
+               struct perf_event_attr *attr = &pos->core.attr;
 
                /* make sure these *are* set */
                perf_evsel__set_sample_bit(pos, TID);
@@ -1048,17 +1053,17 @@ static int kvm_live_open_events(struct perf_kvm_stat *kvm)
                attr->disabled = 1;
        }
 
-       err = perf_evlist__open(evlist);
+       err = evlist__open(evlist);
        if (err < 0) {
                printf("Couldn't create the events: %s\n",
                       str_error_r(errno, sbuf, sizeof(sbuf)));
                goto out;
        }
 
-       if (perf_evlist__mmap(evlist, kvm->opts.mmap_pages) < 0) {
+       if (evlist__mmap(evlist, kvm->opts.mmap_pages) < 0) {
                ui__error("Failed to mmap the events: %s\n",
                          str_error_r(errno, sbuf, sizeof(sbuf)));
-               perf_evlist__close(evlist);
+               evlist__close(evlist);
                goto out;
        }
 
@@ -1087,9 +1092,9 @@ static int read_events(struct perf_kvm_stat *kvm)
 
        kvm->tool = eops;
        kvm->session = perf_session__new(&file, false, &kvm->tool);
-       if (!kvm->session) {
+       if (IS_ERR(kvm->session)) {
                pr_err("Initializing perf session failed\n");
-               return -1;
+               return PTR_ERR(kvm->session);
        }
 
        symbol__init(&kvm->session->header.env);
@@ -1283,14 +1288,14 @@ kvm_events_report(struct perf_kvm_stat *kvm, int argc, const char **argv)
 }
 
 #ifdef HAVE_TIMERFD_SUPPORT
-static struct perf_evlist *kvm_live_event_list(void)
+static struct evlist *kvm_live_event_list(void)
 {
-       struct perf_evlist *evlist;
+       struct evlist *evlist;
        char *tp, *name, *sys;
        int err = -1;
        const char * const *events_tp;
 
-       evlist = perf_evlist__new();
+       evlist = evlist__new();
        if (evlist == NULL)
                return NULL;
 
@@ -1325,7 +1330,7 @@ static struct perf_evlist *kvm_live_event_list(void)
 
 out:
        if (err) {
-               perf_evlist__delete(evlist);
+               evlist__delete(evlist);
                evlist = NULL;
        }
 
@@ -1442,15 +1447,15 @@ static int kvm_events_live(struct perf_kvm_stat *kvm,
         * perf session
         */
        kvm->session = perf_session__new(&data, false, &kvm->tool);
-       if (kvm->session == NULL) {
-               err = -1;
+       if (IS_ERR(kvm->session)) {
+               err = PTR_ERR(kvm->session);
                goto out;
        }
        kvm->session->evlist = kvm->evlist;
        perf_session__set_id_hdr_size(kvm->session);
        ordered_events__set_copy_on_queue(&kvm->session->ordered_events, true);
        machine__synthesize_threads(&kvm->session->machines.host, &kvm->opts.target,
-                                   kvm->evlist->threads, false, 1);
+                                   kvm->evlist->core.threads, false, 1);
        err = kvm_live_open_events(kvm);
        if (err)
                goto out;
@@ -1460,7 +1465,7 @@ static int kvm_events_live(struct perf_kvm_stat *kvm,
 out:
        perf_session__delete(kvm->session);
        kvm->session = NULL;
-       perf_evlist__delete(kvm->evlist);
+       evlist__delete(kvm->evlist);
 
        return err;
 }
@@ -1510,11 +1515,21 @@ static int kvm_cmd_stat(const char *file_name, int argc, const char **argv)
 }
 #endif /* HAVE_KVM_STAT_SUPPORT */
 
+int __weak kvm_add_default_arch_event(int *argc __maybe_unused,
+                                       const char **argv __maybe_unused)
+{
+       return 0;
+}
+
 static int __cmd_record(const char *file_name, int argc, const char **argv)
 {
-       int rec_argc, i = 0, j;
+       int rec_argc, i = 0, j, ret;
        const char **rec_argv;
 
+       ret = kvm_add_default_arch_event(&argc, argv);
+       if (ret)
+               return -EINVAL;
+
        rec_argc = argc + 2;
        rec_argv = calloc(rec_argc + 1, sizeof(char *));
        rec_argv[i++] = strdup("record");