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: Leo 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.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
f57a64142c
commit
c695d48a33
|
@ -77,15 +77,6 @@ COMPARE_EVENT_KEY(min, stats.min);
|
|||
COMPARE_EVENT_KEY(count, stats.n);
|
||||
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 hists hists;
|
||||
struct perf_hpp_list list;
|
||||
|
@ -759,18 +750,18 @@ static bool handle_kvm_event(struct perf_kvm_stat *kvm,
|
|||
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++) {
|
||||
if (!strcmp(keys[i].name, kvm->sort_key)) {
|
||||
kvm->compare = keys[i].key;
|
||||
for (i = 0; i < ARRAY_SIZE(key_array); i++)
|
||||
if (!strcmp(key_array[i], kvm->sort_key))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
pr_err("Unknown compare key:%s\n", kvm->sort_key);
|
||||
pr_err("Unsupported sort key: %s\n", kvm->sort_key);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1200,7 +1191,7 @@ static int kvm_events_live_report(struct perf_kvm_stat *kvm)
|
|||
return ret;
|
||||
|
||||
if (!verify_vcpu(kvm->trace_vcpu) ||
|
||||
!select_key(kvm) ||
|
||||
!is_valid_key(kvm) ||
|
||||
!register_kvm_events_ops(kvm)) {
|
||||
goto out;
|
||||
}
|
||||
|
@ -1395,7 +1386,7 @@ static int kvm_events_report_vcpu(struct perf_kvm_stat *kvm)
|
|||
if (!verify_vcpu(vcpu))
|
||||
goto exit;
|
||||
|
||||
if (!select_key(kvm))
|
||||
if (!is_valid_key(kvm))
|
||||
goto exit;
|
||||
|
||||
if (!register_kvm_events_ops(kvm))
|
||||
|
|
|
@ -49,13 +49,6 @@ struct kvm_event {
|
|||
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 {
|
||||
void (*get_key)(struct evsel *evsel,
|
||||
struct perf_sample *sample,
|
||||
|
@ -98,7 +91,6 @@ struct perf_kvm_stat {
|
|||
const char *exit_reasons_isa;
|
||||
|
||||
struct kvm_events_ops *events_ops;
|
||||
key_cmp_fun compare;
|
||||
|
||||
u64 total_time;
|
||||
u64 total_count;
|
||||
|
|
Loading…
Reference in New Issue