summaryrefslogtreecommitdiff
path: root/tools/perf/util/kvm-stat.h
diff options
context:
space:
mode:
authorAlexander Yarygin <yarygin@linux.vnet.ibm.com>2014-07-03 18:29:07 +0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2014-07-17 00:57:33 +0400
commit3be8e2a0a53c3179a44a933614f6a893da0b5c19 (patch)
tree7f2ebeed37634cfcf46244e80ad1c1c90642e389 /tools/perf/util/kvm-stat.h
parent54c801ff71ba9c9ae41871e226b9d846ff9c6bab (diff)
downloadlinux-3be8e2a0a53c3179a44a933614f6a893da0b5c19.tar.xz
perf kvm: Add stat support on s390
On s390, the vmexit event has a tree-like structure: between exit_event_begin and exit_event_end several other events may happen and with each of them refining the previous ones. This patch adds a decoder for such events to the generic code and also the files <asm/kvm_perf.h> and kvm-stat.c for s390. Commands 'perf kvm stat record', 'report' and 'live' are supported. Reviewed-by: David Ahern <dsahern@gmail.com> Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> Cc: Christian Borntraeger <borntraeger@de.ibm.com> Cc: Cornelia Huck <cornelia.huck@de.ibm.com> Cc: David Ahern <dsahern@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1404397747-20939-5-git-send-email-yarygin@linux.vnet.ibm.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/kvm-stat.h')
-rw-r--r--tools/perf/util/kvm-stat.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/tools/perf/util/kvm-stat.h b/tools/perf/util/kvm-stat.h
index ba937caa28ac..0b5a8cd2ee79 100644
--- a/tools/perf/util/kvm-stat.h
+++ b/tools/perf/util/kvm-stat.h
@@ -12,6 +12,7 @@ struct event_key {
#define INVALID_KEY (~0ULL)
u64 key;
int info;
+ struct exit_reasons_table *exit_reasons;
};
struct kvm_event_stats {
@@ -41,12 +42,20 @@ struct kvm_event_key {
struct perf_kvm_stat;
+struct child_event_ops {
+ void (*get_key)(struct perf_evsel *evsel,
+ struct perf_sample *sample,
+ struct event_key *key);
+ const char *name;
+};
+
struct kvm_events_ops {
bool (*is_begin_event)(struct perf_evsel *evsel,
struct perf_sample *sample,
struct event_key *key);
bool (*is_end_event)(struct perf_evsel *evsel,
struct perf_sample *sample, struct event_key *key);
+ struct child_event_ops *child_ops;
void (*decode_key)(struct perf_kvm_stat *kvm, struct event_key *key,
char *decode);
const char *name;