Commit c695d48a authored by Leo Yan's avatar Leo Yan Committed by Arnaldo Carvalho de Melo

perf kvm: Polish sorting key

Since histograms supports sorting, the tool doesn't need to maintain the
mapping between the sorting keys and the corresponding comparison
callbacks, therefore, this patch removes structure kvm_event_key.

But we still need to validate the sorting key, this patch uses an array
for sorting keys and renames function select_key() to is_valid_key()
to validate the sorting key passed by user.
Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.g.garry@oracle.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: linux-arm-kernel@lists.infradead.org
Link: https://lore.kernel.org/r/20230315145112.186603-2-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent f57a6414
...@@ -77,15 +77,6 @@ COMPARE_EVENT_KEY(min, stats.min); ...@@ -77,15 +77,6 @@ COMPARE_EVENT_KEY(min, stats.min);
COMPARE_EVENT_KEY(count, stats.n); COMPARE_EVENT_KEY(count, stats.n);
COMPARE_EVENT_KEY(mean, stats.mean); COMPARE_EVENT_KEY(mean, stats.mean);
#define DEF_SORT_NAME_KEY(name, compare_key) \
{ #name, cmp_event_ ## compare_key }
static struct kvm_event_key keys[] = {
DEF_SORT_NAME_KEY(sample, count),
DEF_SORT_NAME_KEY(time, mean),
{ NULL, NULL }
};
struct kvm_hists { struct kvm_hists {
struct hists hists; struct hists hists;
struct perf_hpp_list list; struct perf_hpp_list list;
...@@ -759,18 +750,18 @@ static bool handle_kvm_event(struct perf_kvm_stat *kvm, ...@@ -759,18 +750,18 @@ static bool handle_kvm_event(struct perf_kvm_stat *kvm,
return true; return true;
} }
static bool select_key(struct perf_kvm_stat *kvm) static bool is_valid_key(struct perf_kvm_stat *kvm)
{ {
int i; static const char *key_array[] = {
"ev_name", "sample", "time", "max_t", "min_t", "mean_t",
};
unsigned int i;
for (i = 0; keys[i].name; i++) { for (i = 0; i < ARRAY_SIZE(key_array); i++)
if (!strcmp(keys[i].name, kvm->sort_key)) { if (!strcmp(key_array[i], kvm->sort_key))
kvm->compare = keys[i].key;
return true; return true;
}
}
pr_err("Unknown compare key:%s\n", kvm->sort_key); pr_err("Unsupported sort key: %s\n", kvm->sort_key);
return false; return false;
} }
...@@ -1200,7 +1191,7 @@ static int kvm_events_live_report(struct perf_kvm_stat *kvm) ...@@ -1200,7 +1191,7 @@ static int kvm_events_live_report(struct perf_kvm_stat *kvm)
return ret; return ret;
if (!verify_vcpu(kvm->trace_vcpu) || if (!verify_vcpu(kvm->trace_vcpu) ||
!select_key(kvm) || !is_valid_key(kvm) ||
!register_kvm_events_ops(kvm)) { !register_kvm_events_ops(kvm)) {
goto out; goto out;
} }
...@@ -1395,7 +1386,7 @@ static int kvm_events_report_vcpu(struct perf_kvm_stat *kvm) ...@@ -1395,7 +1386,7 @@ static int kvm_events_report_vcpu(struct perf_kvm_stat *kvm)
if (!verify_vcpu(vcpu)) if (!verify_vcpu(vcpu))
goto exit; goto exit;
if (!select_key(kvm)) if (!is_valid_key(kvm))
goto exit; goto exit;
if (!register_kvm_events_ops(kvm)) if (!register_kvm_events_ops(kvm))
......
...@@ -49,13 +49,6 @@ struct kvm_event { ...@@ -49,13 +49,6 @@ struct kvm_event {
struct hist_entry he; struct hist_entry he;
}; };
typedef int64_t (*key_cmp_fun)(struct kvm_event*, struct kvm_event*, int);
struct kvm_event_key {
const char *name;
key_cmp_fun key;
};
struct child_event_ops { struct child_event_ops {
void (*get_key)(struct evsel *evsel, void (*get_key)(struct evsel *evsel,
struct perf_sample *sample, struct perf_sample *sample,
...@@ -98,7 +91,6 @@ struct perf_kvm_stat { ...@@ -98,7 +91,6 @@ struct perf_kvm_stat {
const char *exit_reasons_isa; const char *exit_reasons_isa;
struct kvm_events_ops *events_ops; struct kvm_events_ops *events_ops;
key_cmp_fun compare;
u64 total_time; u64 total_time;
u64 total_count; u64 total_count;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment