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.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 4418d9214872..bff666458b28 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -30,7 +30,6 @@
30#include <math.h> 30#include <math.h>
31 31
32#ifdef HAVE_KVM_STAT_SUPPORT 32#ifdef HAVE_KVM_STAT_SUPPORT
33#include <asm/kvm_perf.h>
34#include "util/kvm-stat.h" 33#include "util/kvm-stat.h"
35 34
36void exit_event_get_key(struct perf_evsel *evsel, 35void exit_event_get_key(struct perf_evsel *evsel,
@@ -38,12 +37,12 @@ void exit_event_get_key(struct perf_evsel *evsel,
38 struct event_key *key) 37 struct event_key *key)
39{ 38{
40 key->info = 0; 39 key->info = 0;
41 key->key = perf_evsel__intval(evsel, sample, KVM_EXIT_REASON); 40 key->key = perf_evsel__intval(evsel, sample, kvm_exit_reason);
42} 41}
43 42
44bool kvm_exit_event(struct perf_evsel *evsel) 43bool kvm_exit_event(struct perf_evsel *evsel)
45{ 44{
46 return !strcmp(evsel->name, KVM_EXIT_TRACE); 45 return !strcmp(evsel->name, kvm_exit_trace);
47} 46}
48 47
49bool exit_event_begin(struct perf_evsel *evsel, 48bool exit_event_begin(struct perf_evsel *evsel,
@@ -59,7 +58,7 @@ bool exit_event_begin(struct perf_evsel *evsel,
59 58
60bool kvm_entry_event(struct perf_evsel *evsel) 59bool kvm_entry_event(struct perf_evsel *evsel)
61{ 60{
62 return !strcmp(evsel->name, KVM_ENTRY_TRACE); 61 return !strcmp(evsel->name, kvm_entry_trace);
63} 62}
64 63
65bool exit_event_end(struct perf_evsel *evsel, 64bool exit_event_end(struct perf_evsel *evsel,
@@ -91,7 +90,7 @@ void exit_event_decode_key(struct perf_kvm_stat *kvm,
91 const char *exit_reason = get_exit_reason(kvm, key->exit_reasons, 90 const char *exit_reason = get_exit_reason(kvm, key->exit_reasons,
92 key->key); 91 key->key);
93 92
94 scnprintf(decode, DECODE_STR_LEN, "%s", exit_reason); 93 scnprintf(decode, decode_str_len, "%s", exit_reason);
95} 94}
96 95
97static bool register_kvm_events_ops(struct perf_kvm_stat *kvm) 96static bool register_kvm_events_ops(struct perf_kvm_stat *kvm)
@@ -357,7 +356,7 @@ static bool handle_end_event(struct perf_kvm_stat *kvm,
357 time_diff = sample->time - time_begin; 356 time_diff = sample->time - time_begin;
358 357
359 if (kvm->duration && time_diff > kvm->duration) { 358 if (kvm->duration && time_diff > kvm->duration) {
360 char decode[DECODE_STR_LEN]; 359 char decode[decode_str_len];
361 360
362 kvm->events_ops->decode_key(kvm, &event->key, decode); 361 kvm->events_ops->decode_key(kvm, &event->key, decode);
363 if (!skip_event(decode)) { 362 if (!skip_event(decode)) {
@@ -385,7 +384,8 @@ struct vcpu_event_record *per_vcpu_record(struct thread *thread,
385 return NULL; 384 return NULL;
386 } 385 }
387 386
388 vcpu_record->vcpu_id = perf_evsel__intval(evsel, sample, VCPU_ID); 387 vcpu_record->vcpu_id = perf_evsel__intval(evsel, sample,
388 vcpu_id_str);
389 thread__set_priv(thread, vcpu_record); 389 thread__set_priv(thread, vcpu_record);
390 } 390 }
391 391
@@ -574,7 +574,7 @@ static void show_timeofday(void)
574 574
575static void print_result(struct perf_kvm_stat *kvm) 575static void print_result(struct perf_kvm_stat *kvm)
576{ 576{
577 char decode[DECODE_STR_LEN]; 577 char decode[decode_str_len];
578 struct kvm_event *event; 578 struct kvm_event *event;
579 int vcpu = kvm->trace_vcpu; 579 int vcpu = kvm->trace_vcpu;
580 580
@@ -585,7 +585,7 @@ static void print_result(struct perf_kvm_stat *kvm)
585 585
586 pr_info("\n\n"); 586 pr_info("\n\n");
587 print_vcpu_info(kvm); 587 print_vcpu_info(kvm);
588 pr_info("%*s ", DECODE_STR_LEN, kvm->events_ops->name); 588 pr_info("%*s ", decode_str_len, kvm->events_ops->name);
589 pr_info("%10s ", "Samples"); 589 pr_info("%10s ", "Samples");
590 pr_info("%9s ", "Samples%"); 590 pr_info("%9s ", "Samples%");
591 591
@@ -604,7 +604,7 @@ static void print_result(struct perf_kvm_stat *kvm)
604 min = get_event_min(event, vcpu); 604 min = get_event_min(event, vcpu);
605 605
606 kvm->events_ops->decode_key(kvm, &event->key, decode); 606 kvm->events_ops->decode_key(kvm, &event->key, decode);
607 pr_info("%*s ", DECODE_STR_LEN, decode); 607 pr_info("%*s ", decode_str_len, decode);
608 pr_info("%10llu ", (unsigned long long)ecount); 608 pr_info("%10llu ", (unsigned long long)ecount);
609 pr_info("%8.2f%% ", (double)ecount / kvm->total_count * 100); 609 pr_info("%8.2f%% ", (double)ecount / kvm->total_count * 100);
610 pr_info("%8.2f%% ", (double)etime / kvm->total_time * 100); 610 pr_info("%8.2f%% ", (double)etime / kvm->total_time * 100);
@@ -1132,6 +1132,11 @@ exit:
1132 _p; \ 1132 _p; \
1133 }) 1133 })
1134 1134
1135int __weak setup_kvm_events_tp(struct perf_kvm_stat *kvm __maybe_unused)
1136{
1137 return 0;
1138}
1139
1135static int 1140static int
1136kvm_events_record(struct perf_kvm_stat *kvm, int argc, const char **argv) 1141kvm_events_record(struct perf_kvm_stat *kvm, int argc, const char **argv)
1137{ 1142{
@@ -1148,7 +1153,14 @@ kvm_events_record(struct perf_kvm_stat *kvm, int argc, const char **argv)
1148 NULL 1153 NULL
1149 }; 1154 };
1150 const char * const *events_tp; 1155 const char * const *events_tp;
1156 int ret;
1157
1151 events_tp_size = 0; 1158 events_tp_size = 0;
1159 ret = setup_kvm_events_tp(kvm);
1160 if (ret < 0) {
1161 pr_err("Unable to setup the kvm tracepoints\n");
1162 return ret;
1163 }
1152 1164
1153 for (events_tp = kvm_events_tp; *events_tp; events_tp++) 1165 for (events_tp = kvm_events_tp; *events_tp; events_tp++)
1154 events_tp_size++; 1166 events_tp_size++;
@@ -1377,6 +1389,12 @@ static int kvm_events_live(struct perf_kvm_stat *kvm,
1377 /* 1389 /*
1378 * generate the event list 1390 * generate the event list
1379 */ 1391 */
1392 err = setup_kvm_events_tp(kvm);
1393 if (err < 0) {
1394 pr_err("Unable to setup the kvm tracepoints\n");
1395 return err;
1396 }
1397
1380 kvm->evlist = kvm_live_event_list(); 1398 kvm->evlist = kvm_live_event_list();
1381 if (kvm->evlist == NULL) { 1399 if (kvm->evlist == NULL) {
1382 err = -1; 1400 err = -1;