1 // SPDX-License-Identifier: GPL-2.0
6 #if defined(HAVE_KVM_STAT_SUPPORT) && defined(HAVE_LIBTRACEEVENT)
8 bool kvm_exit_event(struct evsel *evsel)
10 return evsel__name_is(evsel, kvm_exit_trace);
13 void exit_event_get_key(struct evsel *evsel,
14 struct perf_sample *sample,
15 struct event_key *key)
18 key->key = evsel__intval(evsel, sample, kvm_exit_reason);
22 bool exit_event_begin(struct evsel *evsel,
23 struct perf_sample *sample, struct event_key *key)
25 if (kvm_exit_event(evsel)) {
26 exit_event_get_key(evsel, sample, key);
33 bool kvm_entry_event(struct evsel *evsel)
35 return evsel__name_is(evsel, kvm_entry_trace);
38 bool exit_event_end(struct evsel *evsel,
39 struct perf_sample *sample __maybe_unused,
40 struct event_key *key __maybe_unused)
42 return kvm_entry_event(evsel);
45 static const char *get_exit_reason(struct perf_kvm_stat *kvm,
46 struct exit_reasons_table *tbl,
49 while (tbl->reason != NULL) {
50 if (tbl->exit_code == exit_code)
55 pr_err("unknown kvm exit code:%lld on %s\n",
56 (unsigned long long)exit_code, kvm->exit_reasons_isa);
60 void exit_event_decode_key(struct perf_kvm_stat *kvm,
61 struct event_key *key,
64 const char *exit_reason = get_exit_reason(kvm, key->exit_reasons,
67 scnprintf(decode, KVM_EVENT_NAME_LEN, "%s", exit_reason);