Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
[firefly-linux-kernel-4.4.55.git] / tools / perf / builtin-kvm.c
index d8bf2271f4ea7e298811c7aa4759ed7ffda84dbd..3c0f3d4fb021b4b0b6730c23e764d931d23faab2 100644 (file)
@@ -376,7 +376,7 @@ struct vcpu_event_record *per_vcpu_record(struct thread *thread,
                                          struct perf_sample *sample)
 {
        /* Only kvm_entry records vcpu id. */
-       if (!thread->priv && kvm_entry_event(evsel)) {
+       if (!thread__priv(thread) && kvm_entry_event(evsel)) {
                struct vcpu_event_record *vcpu_record;
 
                vcpu_record = zalloc(sizeof(*vcpu_record));
@@ -386,10 +386,10 @@ struct vcpu_event_record *per_vcpu_record(struct thread *thread,
                }
 
                vcpu_record->vcpu_id = perf_evsel__intval(evsel, sample, VCPU_ID);
-               thread->priv = vcpu_record;
+               thread__set_priv(thread, vcpu_record);
        }
 
-       return thread->priv;
+       return thread__priv(thread);
 }
 
 static bool handle_kvm_event(struct perf_kvm_stat *kvm,
@@ -896,8 +896,7 @@ static int perf_kvm__handle_stdin(void)
 
 static int kvm_events_live_report(struct perf_kvm_stat *kvm)
 {
-       struct pollfd *pollfds = NULL;
-       int nr_fds, nr_stdin, ret, err = -EINVAL;
+       int nr_stdin, ret, err = -EINVAL;
        struct termios save;
 
        /* live flag must be set first */
@@ -919,34 +918,27 @@ static int kvm_events_live_report(struct perf_kvm_stat *kvm)
        signal(SIGINT, sig_handler);
        signal(SIGTERM, sig_handler);
 
-       /* use pollfds -- need to add timerfd and stdin */
-       nr_fds = kvm->evlist->pollfd.nr;
-
        /* add timer fd */
        if (perf_kvm__timerfd_create(kvm) < 0) {
                err = -1;
                goto out;
        }
 
-       if (perf_evlist__add_pollfd(kvm->evlist, kvm->timerfd))
+       if (perf_evlist__add_pollfd(kvm->evlist, kvm->timerfd) < 0)
                goto out;
 
-       nr_fds++;
-
-       if (perf_evlist__add_pollfd(kvm->evlist, fileno(stdin)))
+       nr_stdin = perf_evlist__add_pollfd(kvm->evlist, fileno(stdin));
+       if (nr_stdin < 0)
                goto out;
 
-       nr_stdin = nr_fds;
-       nr_fds++;
        if (fd_set_nonblock(fileno(stdin)) != 0)
                goto out;
 
-       pollfds  = kvm->evlist->pollfd.entries;
-
        /* everything is good - enable the events and process */
        perf_evlist__enable(kvm->evlist);
 
        while (!done) {
+               struct fdarray *fda = &kvm->evlist->pollfd;
                int rc;
 
                rc = perf_kvm__mmap_read(kvm);
@@ -957,11 +949,11 @@ static int kvm_events_live_report(struct perf_kvm_stat *kvm)
                if (err)
                        goto out;
 
-               if (pollfds[nr_stdin].revents & POLLIN)
+               if (fda->entries[nr_stdin].revents & POLLIN)
                        done = perf_kvm__handle_stdin();
 
                if (!rc && !done)
-                       err = poll(pollfds, nr_fds, 100);
+                       err = fdarray__poll(fda, 100);
        }
 
        perf_evlist__disable(kvm->evlist);
@@ -1140,6 +1132,10 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc, const char **argv)
                "-m", "1024",
                "-c", "1",
        };
+       const char * const kvm_stat_record_usage[] = {
+               "perf kvm stat record [<options>]",
+               NULL
+       };
        const char * const *events_tp;
        events_tp_size = 0;
 
@@ -1167,6 +1163,27 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc, const char **argv)
        for (j = 1; j < (unsigned int)argc; j++, i++)
                rec_argv[i] = argv[j];
 
+       set_option_flag(record_options, 'e', "event", PARSE_OPT_HIDDEN);
+       set_option_flag(record_options, 0, "filter", PARSE_OPT_HIDDEN);
+       set_option_flag(record_options, 'R', "raw-samples", PARSE_OPT_HIDDEN);
+
+       set_option_flag(record_options, 'F', "freq", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 0, "group", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 'g', NULL, PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 0, "call-graph", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 'd', "data", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 'T', "timestamp", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 'P', "period", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 'n', "no-samples", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 'N', "no-buildid-cache", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 'B', "no-buildid", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 'G', "cgroup", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 'b', "branch-any", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 'j', "branch-filter", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 'W', "weight", PARSE_OPT_DISABLED);
+       set_option_flag(record_options, 0, "transaction", PARSE_OPT_DISABLED);
+
+       record_usage = kvm_stat_record_usage;
        return cmd_record(i, rec_argv, NULL);
 }
 
@@ -1366,6 +1383,7 @@ static int kvm_events_live(struct perf_kvm_stat *kvm,
        }
        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);
        err = kvm_live_open_events(kvm);