File Index
Files and directories
Sign in
FILE

kvm-stat.c

File preview with syntax highlighting.

linux-6.19.14/tools/perf/util/kvm-stat.c C
 1// SPDX-License-Identifier: GPL-2.0
 2#include "debug.h"
 3#include "evsel.h"
 4#include "kvm-stat.h"
 5
 6#if defined(HAVE_KVM_STAT_SUPPORT) && defined(HAVE_LIBTRACEEVENT)
 7
 8bool kvm_exit_event(struct evsel *evsel)
 9{
10	return evsel__name_is(evsel, kvm_exit_trace);
11}
12
13void exit_event_get_key(struct evsel *evsel,
14			struct perf_sample *sample,
15			struct event_key *key)
16{
17	key->info = 0;
18	key->key  = evsel__intval(evsel, sample, kvm_exit_reason);
19}
20
21
22bool exit_event_begin(struct evsel *evsel,
23		      struct perf_sample *sample, struct event_key *key)
24{
25	if (kvm_exit_event(evsel)) {
26		exit_event_get_key(evsel, sample, key);
27		return true;
28	}
29
30	return false;
31}
32
33bool kvm_entry_event(struct evsel *evsel)
34{
35	return evsel__name_is(evsel, kvm_entry_trace);
36}
37
38bool exit_event_end(struct evsel *evsel,
39		    struct perf_sample *sample __maybe_unused,
40		    struct event_key *key __maybe_unused)
41{
42	return kvm_entry_event(evsel);
43}
44
45static const char *get_exit_reason(struct perf_kvm_stat *kvm,
46				   struct exit_reasons_table *tbl,
47				   u64 exit_code)
48{
49	while (tbl->reason != NULL) {
50		if (tbl->exit_code == exit_code)
51			return tbl->reason;
52		tbl++;
53	}
54
55	pr_err("unknown kvm exit code:%lld on %s\n",
56		(unsigned long long)exit_code, kvm->exit_reasons_isa);
57	return "UNKNOWN";
58}
59
60void exit_event_decode_key(struct perf_kvm_stat *kvm,
61			   struct event_key *key,
62			   char *decode)
63{
64	const char *exit_reason = get_exit_reason(kvm, key->exit_reasons,
65						  key->key);
66
67	scnprintf(decode, KVM_EVENT_NAME_LEN, "%s", exit_reason);
68}
69
70#endif
~/ Read-only file preview.