|
@@ -99,7 +99,6 @@ struct perf_kvm_stat {
|
|
|
int trace_vcpu;
|
|
|
|
|
|
struct exit_reasons_table *exit_reasons;
|
|
|
- int exit_reasons_size;
|
|
|
const char *exit_reasons_isa;
|
|
|
|
|
|
struct kvm_events_ops *events_ops;
|
|
@@ -158,20 +157,19 @@ static bool exit_event_end(struct perf_evsel *evsel,
|
|
|
return kvm_entry_event(evsel);
|
|
|
}
|
|
|
|
|
|
-static struct exit_reasons_table vmx_exit_reasons[] = {
|
|
|
- VMX_EXIT_REASONS
|
|
|
-};
|
|
|
+#define define_exit_reasons_table(name, symbols) \
|
|
|
+ static struct exit_reasons_table name[] = { \
|
|
|
+ symbols, { -1, NULL } \
|
|
|
+ }
|
|
|
|
|
|
-static struct exit_reasons_table svm_exit_reasons[] = {
|
|
|
- SVM_EXIT_REASONS
|
|
|
-};
|
|
|
+define_exit_reasons_table(vmx_exit_reasons, VMX_EXIT_REASONS);
|
|
|
+define_exit_reasons_table(svm_exit_reasons, SVM_EXIT_REASONS);
|
|
|
|
|
|
-static const char *get_exit_reason(struct perf_kvm_stat *kvm, u64 exit_code)
|
|
|
+static const char *get_exit_reason(struct perf_kvm_stat *kvm,
|
|
|
+ struct exit_reasons_table *tbl,
|
|
|
+ u64 exit_code)
|
|
|
{
|
|
|
- int i = kvm->exit_reasons_size;
|
|
|
- struct exit_reasons_table *tbl = kvm->exit_reasons;
|
|
|
-
|
|
|
- while (i--) {
|
|
|
+ while (tbl->reason != NULL) {
|
|
|
if (tbl->exit_code == exit_code)
|
|
|
return tbl->reason;
|
|
|
tbl++;
|
|
@@ -186,7 +184,8 @@ static void exit_event_decode_key(struct perf_kvm_stat *kvm,
|
|
|
struct event_key *key,
|
|
|
char decode[20])
|
|
|
{
|
|
|
- const char *exit_reason = get_exit_reason(kvm, key->key);
|
|
|
+ const char *exit_reason = get_exit_reason(kvm, kvm->exit_reasons,
|
|
|
+ key->key);
|
|
|
|
|
|
scnprintf(decode, 20, "%s", exit_reason);
|
|
|
}
|
|
@@ -862,7 +861,6 @@ static int cpu_isa_config(struct perf_kvm_stat *kvm)
|
|
|
|
|
|
if (isa == 1) {
|
|
|
kvm->exit_reasons = vmx_exit_reasons;
|
|
|
- kvm->exit_reasons_size = ARRAY_SIZE(vmx_exit_reasons);
|
|
|
kvm->exit_reasons_isa = "VMX";
|
|
|
}
|
|
|
|
|
@@ -1586,7 +1584,6 @@ static int kvm_cmd_stat(const char *file_name, int argc, const char **argv)
|
|
|
.sort_key = "sample",
|
|
|
|
|
|
.exit_reasons = svm_exit_reasons,
|
|
|
- .exit_reasons_size = ARRAY_SIZE(svm_exit_reasons),
|
|
|
.exit_reasons_isa = "SVM",
|
|
|
};
|
|
|
|