All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-kernel@vger.kernel.org,
	Alexander Yarygin <yarygin@linux.vnet.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	Cornelia Huck <cornelia.huck@de.ibm.com>,
	David Ahern <dsahern@gmail.com>, Jiri Olsa <jolsa@redhat.com>,
	Paul Mackerras <paulus@samba.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 10/16] perf kvm: Simplify exit reasons tables definitions
Date: Tue,  8 Jul 2014 16:02:58 -0300	[thread overview]
Message-ID: <1404846184-20075-11-git-send-email-acme@kernel.org> (raw)
In-Reply-To: <1404846184-20075-1-git-send-email-acme@kernel.org>

From: Alexander Yarygin <yarygin@linux.vnet.ibm.com>

The perf_kvm_stat struct keeps the size of a table of exit reasons in
the field 'exit_reasons_size'.

The field is initialized and then used by get_exit_reason() for serial
access to the table, so that the calling function does not actually need
to know table size.

Usage of tables with 'end of sequence' marker simplifies the
get_exit_reason() function.

Also the patch introduces a define_exit_reasons_table, which makes it
easier to define new tables.

Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
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: 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/1404395992-17095-3-git-send-email-yarygin@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-kvm.c | 27 ++++++++++++---------------
 1 file changed, 12 insertions(+), 15 deletions(-)

diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 214ec0e7492b..75f354459005 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -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",
 	};
 
-- 
1.9.3


  parent reply	other threads:[~2014-07-08 19:04 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-08 19:02 [GIT PULL 00/16] perf/cor improvements and fixes Arnaldo Carvalho de Melo
2014-07-08 19:02 ` [PATCH 01/16] perf ui browser: Add ->rows to disambiguate from ->height Arnaldo Carvalho de Melo
2014-07-08 19:02 ` [PATCH 02/16] perf ui browser: Allow overriding refresh_dimensions method Arnaldo Carvalho de Melo
2014-07-08 19:02 ` [PATCH 03/16] perf hists browser: Introduce gotorc method Arnaldo Carvalho de Melo
2014-07-08 19:02 ` [PATCH 04/16] perf hists browser: Override ui_browser refresh_dimensions method Arnaldo Carvalho de Melo
2014-07-09 22:48   ` Jiri Olsa
2014-07-10 13:50     ` Arnaldo Carvalho de Melo
2014-07-08 19:02 ` [PATCH 05/16] perf hists browser: Add support for showing columns header Arnaldo Carvalho de Melo
2014-07-08 19:02 ` [PATCH 06/16] perf hists browser: Display columns header text on 'H' press Arnaldo Carvalho de Melo
2014-07-08 19:02 ` [PATCH 07/16] perf hists browser: Add ui.show-headers config file option Arnaldo Carvalho de Melo
2014-07-08 19:02 ` [PATCH 08/16] perf hists browser: Left justify column headers Arnaldo Carvalho de Melo
2014-07-08 19:02 ` [PATCH 09/16] perf kvm: Introduce HAVE_KVM_STAT_SUPPORT flag Arnaldo Carvalho de Melo
2014-07-08 19:02 ` Arnaldo Carvalho de Melo [this message]
2014-07-08 19:02 ` [PATCH 11/16] perf kvm: Refactoring of cpu_isa_config() Arnaldo Carvalho de Melo
2014-07-08 19:03 ` [PATCH 12/16] perf tools: Allow to use cpuinfo on s390 Arnaldo Carvalho de Melo
2014-07-08 19:03 ` [PATCH 13/16] perf tools: Convert open coded equivalents to asprintf() Arnaldo Carvalho de Melo
2014-07-08 19:03 ` [PATCH 14/16] perf tools: Suggest using -f to override perf.data file ownership message Arnaldo Carvalho de Melo
2014-07-08 19:03 ` [PATCH 15/16] perf trace: Add pagefault statistics Arnaldo Carvalho de Melo
2014-07-08 19:03 ` [PATCH 16/16] perf trace: Fix build on 32-bit systems Arnaldo Carvalho de Melo
2014-07-16 11:47 ` [GIT PULL 00/16] perf/cor improvements and fixes Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1404846184-20075-11-git-send-email-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@redhat.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cornelia.huck@de.ibm.com \
    --cc=dsahern@gmail.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=paulus@samba.org \
    --cc=yarygin@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.