aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-kvm.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-kvm.c')
-rw-r--r--tools/perf/builtin-kvm.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index d8bf2271f4ea..b65eb0507b38 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -376,7 +376,7 @@ struct vcpu_event_record *per_vcpu_record(struct thread *thread,
376 struct perf_sample *sample) 376 struct perf_sample *sample)
377{ 377{
378 /* Only kvm_entry records vcpu id. */ 378 /* Only kvm_entry records vcpu id. */
379 if (!thread->priv && kvm_entry_event(evsel)) { 379 if (!thread__priv(thread) && kvm_entry_event(evsel)) {
380 struct vcpu_event_record *vcpu_record; 380 struct vcpu_event_record *vcpu_record;
381 381
382 vcpu_record = zalloc(sizeof(*vcpu_record)); 382 vcpu_record = zalloc(sizeof(*vcpu_record));
@@ -386,10 +386,10 @@ struct vcpu_event_record *per_vcpu_record(struct thread *thread,
386 } 386 }
387 387
388 vcpu_record->vcpu_id = perf_evsel__intval(evsel, sample, VCPU_ID); 388 vcpu_record->vcpu_id = perf_evsel__intval(evsel, sample, VCPU_ID);
389 thread->priv = vcpu_record; 389 thread__set_priv(thread, vcpu_record);
390 } 390 }
391 391
392 return thread->priv; 392 return thread__priv(thread);
393} 393}
394 394
395static bool handle_kvm_event(struct perf_kvm_stat *kvm, 395static bool handle_kvm_event(struct perf_kvm_stat *kvm,
@@ -896,8 +896,7 @@ static int perf_kvm__handle_stdin(void)
896 896
897static int kvm_events_live_report(struct perf_kvm_stat *kvm) 897static int kvm_events_live_report(struct perf_kvm_stat *kvm)
898{ 898{
899 struct pollfd *pollfds = NULL; 899 int nr_stdin, ret, err = -EINVAL;
900 int nr_fds, nr_stdin, ret, err = -EINVAL;
901 struct termios save; 900 struct termios save;
902 901
903 /* live flag must be set first */ 902 /* live flag must be set first */
@@ -919,34 +918,27 @@ static int kvm_events_live_report(struct perf_kvm_stat *kvm)
919 signal(SIGINT, sig_handler); 918 signal(SIGINT, sig_handler);
920 signal(SIGTERM, sig_handler); 919 signal(SIGTERM, sig_handler);
921 920
922 /* use pollfds -- need to add timerfd and stdin */
923 nr_fds = kvm->evlist->pollfd.nr;
924
925 /* add timer fd */ 921 /* add timer fd */
926 if (perf_kvm__timerfd_create(kvm) < 0) { 922 if (perf_kvm__timerfd_create(kvm) < 0) {
927 err = -1; 923 err = -1;
928 goto out; 924 goto out;
929 } 925 }
930 926
931 if (perf_evlist__add_pollfd(kvm->evlist, kvm->timerfd)) 927 if (perf_evlist__add_pollfd(kvm->evlist, kvm->timerfd) < 0)
932 goto out; 928 goto out;
933 929
934 nr_fds++; 930 nr_stdin = perf_evlist__add_pollfd(kvm->evlist, fileno(stdin));
935 931 if (nr_stdin < 0)
936 if (perf_evlist__add_pollfd(kvm->evlist, fileno(stdin)))
937 goto out; 932 goto out;
938 933
939 nr_stdin = nr_fds;
940 nr_fds++;
941 if (fd_set_nonblock(fileno(stdin)) != 0) 934 if (fd_set_nonblock(fileno(stdin)) != 0)
942 goto out; 935 goto out;
943 936
944 pollfds = kvm->evlist->pollfd.entries;
945
946 /* everything is good - enable the events and process */ 937 /* everything is good - enable the events and process */
947 perf_evlist__enable(kvm->evlist); 938 perf_evlist__enable(kvm->evlist);
948 939
949 while (!done) { 940 while (!done) {
941 struct fdarray *fda = &kvm->evlist->pollfd;
950 int rc; 942 int rc;
951 943
952 rc = perf_kvm__mmap_read(kvm); 944 rc = perf_kvm__mmap_read(kvm);
@@ -957,11 +949,11 @@ static int kvm_events_live_report(struct perf_kvm_stat *kvm)
957 if (err) 949 if (err)
958 goto out; 950 goto out;
959 951
960 if (pollfds[nr_stdin].revents & POLLIN) 952 if (fda->entries[nr_stdin].revents & POLLIN)
961 done = perf_kvm__handle_stdin(); 953 done = perf_kvm__handle_stdin();
962 954
963 if (!rc && !done) 955 if (!rc && !done)
964 err = poll(pollfds, nr_fds, 100); 956 err = fdarray__poll(fda, 100);
965 } 957 }
966 958
967 perf_evlist__disable(kvm->evlist); 959 perf_evlist__disable(kvm->evlist);
@@ -1366,6 +1358,7 @@ static int kvm_events_live(struct perf_kvm_stat *kvm,
1366 } 1358 }
1367 kvm->session->evlist = kvm->evlist; 1359 kvm->session->evlist = kvm->evlist;
1368 perf_session__set_id_hdr_size(kvm->session); 1360 perf_session__set_id_hdr_size(kvm->session);
1361 ordered_events__set_copy_on_queue(&kvm->session->ordered_events, true);
1369 machine__synthesize_threads(&kvm->session->machines.host, &kvm->opts.target, 1362 machine__synthesize_threads(&kvm->session->machines.host, &kvm->opts.target,
1370 kvm->evlist->threads, false); 1363 kvm->evlist->threads, false);
1371 err = kvm_live_open_events(kvm); 1364 err = kvm_live_open_events(kvm);