All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] perf kvm: Refactoring and small improvements
@ 2014-07-03 13:59 Alexander Yarygin
  2014-07-03 13:59 ` [PATCH 1/4] perf kvm: Introduce HAVE_KVM_STAT_SUPPORT flag Alexander Yarygin
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Alexander Yarygin @ 2014-07-03 13:59 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: David Ahern, Peter Zijlstra, Paul Mackerras,
	Arnaldo Carvalho de Melo, Christian Borntraeger, Cornelia Huck,
	linux-kernel, Alexander Yarygin

Hello,

We divided patch series "perf/s390/kvm: trace events, perf kvm stat"
into 2 parts.

This patch set is a preparation for the next one, which adds support for
perf kvm stat support on s390.

Patch 1 removes direct dependence of perf kvm stat from x86.
Patches 2-3 are refactoring.
Patch 4 adds arch/s390/header.c to be used by perf kvm stat on s390.

Compared to the previous version, patches contain some minor style/typo fixes.

Link to the previous thread: https://lkml.org/lkml/2014/4/25/331
(mirror: http://marc.info/?l=linux-kernel&m=139841718926897)

Please consider to merge.

Thanks.

Alexander Yarygin (4):
  perf kvm: Introduce HAVE_KVM_STAT_SUPPORT flag
  perf kvm: Simplify of exit reasons tables definitions
  perf kvm: Refactoring of cpu_isa_config()
  perf: Allow to use cpuinfo on s390

 tools/perf/arch/s390/Makefile      |    1 +
 tools/perf/arch/s390/util/header.c |   28 ++++++++++++++
 tools/perf/arch/x86/Makefile       |    1 +
 tools/perf/builtin-kvm.c           |   72 +++++++++++++++++++-----------------
 tools/perf/config/Makefile         |    4 ++
 tools/perf/perf-sys.h              |    1 +
 6 files changed, 73 insertions(+), 34 deletions(-)
 create mode 100644 tools/perf/arch/s390/util/header.c

--
1.7.9.5


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/4] perf kvm: Introduce HAVE_KVM_STAT_SUPPORT flag
  2014-07-03 13:59 [PATCH 0/4] perf kvm: Refactoring and small improvements Alexander Yarygin
@ 2014-07-03 13:59 ` Alexander Yarygin
  2014-07-16 19:15   ` [tip:perf/core] " tip-bot for Alexander Yarygin
  2014-07-03 13:59 ` [PATCH 2/4] perf kvm: Simplify of exit reasons tables definitions Alexander Yarygin
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Alexander Yarygin @ 2014-07-03 13:59 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: David Ahern, Peter Zijlstra, Paul Mackerras,
	Arnaldo Carvalho de Melo, Christian Borntraeger, Cornelia Huck,
	linux-kernel, Alexander Yarygin

kvm stat support is currently conditional on i386/x86_64. Let's
abstract this into a HAVE_KVM_STAT_SUPPORT flag, so that other
architectures can support kvm stat as well.

Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: David Ahern <dsahern@gmail.com>
---
 tools/perf/arch/x86/Makefile |    1 +
 tools/perf/builtin-kvm.c     |    6 +++---
 tools/perf/config/Makefile   |    4 ++++
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/tools/perf/arch/x86/Makefile b/tools/perf/arch/x86/Makefile
index 1641542..d393901 100644
--- a/tools/perf/arch/x86/Makefile
+++ b/tools/perf/arch/x86/Makefile
@@ -15,3 +15,4 @@ endif
 LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/header.o
 LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/tsc.o
 LIB_H += arch/$(ARCH)/util/tsc.h
+HAVE_KVM_STAT_SUPPORT := 1
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 0f1e5a2..214ec0e 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -29,7 +29,7 @@
 #include <pthread.h>
 #include <math.h>
 
-#if defined(__i386__) || defined(__x86_64__)
+#ifdef HAVE_KVM_STAT_SUPPORT
 #include <asm/svm.h>
 #include <asm/vmx.h>
 #include <asm/kvm.h>
@@ -1609,7 +1609,7 @@ static int kvm_cmd_stat(const char *file_name, int argc, const char **argv)
 perf_stat:
 	return cmd_stat(argc, argv, NULL);
 }
-#endif
+#endif /* HAVE_KVM_STAT_SUPPORT */
 
 static int __cmd_record(const char *file_name, int argc, const char **argv)
 {
@@ -1726,7 +1726,7 @@ int cmd_kvm(int argc, const char **argv, const char *prefix __maybe_unused)
 		return cmd_top(argc, argv, NULL);
 	else if (!strncmp(argv[0], "buildid-list", 12))
 		return __cmd_buildid_list(file_name, argc, argv);
-#if defined(__i386__) || defined(__x86_64__)
+#ifdef HAVE_KVM_STAT_SUPPORT
 	else if (!strncmp(argv[0], "stat", 4))
 		return kvm_cmd_stat(file_name, argc, argv);
 #endif
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index 4f100b5..82d7db5 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -586,6 +586,10 @@ ifndef NO_LIBNUMA
   endif
 endif
 
+ifdef HAVE_KVM_STAT_SUPPORT
+    CFLAGS += -DHAVE_KVM_STAT_SUPPORT
+endif
+
 # Among the variables below, these:
 #   perfexecdir
 #   template_dir
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 2/4] perf kvm: Simplify of exit reasons tables definitions
  2014-07-03 13:59 [PATCH 0/4] perf kvm: Refactoring and small improvements Alexander Yarygin
  2014-07-03 13:59 ` [PATCH 1/4] perf kvm: Introduce HAVE_KVM_STAT_SUPPORT flag Alexander Yarygin
@ 2014-07-03 13:59 ` Alexander Yarygin
  2014-07-16 19:16   ` [tip:perf/core] perf kvm: Simplify " tip-bot for Alexander Yarygin
  2014-07-03 13:59 ` [PATCH 3/4] perf kvm: Refactoring of cpu_isa_config() Alexander Yarygin
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Alexander Yarygin @ 2014-07-03 13:59 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: David Ahern, Peter Zijlstra, Paul Mackerras,
	Arnaldo Carvalho de Melo, Christian Borntraeger, Cornelia Huck,
	linux-kernel, Alexander Yarygin

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 can simplify
get_exit_reason() function.

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

Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: David Ahern <dsahern@gmail.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 214ec0e..75f3544 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.7.9.5


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 3/4] perf kvm: Refactoring of cpu_isa_config()
  2014-07-03 13:59 [PATCH 0/4] perf kvm: Refactoring and small improvements Alexander Yarygin
  2014-07-03 13:59 ` [PATCH 1/4] perf kvm: Introduce HAVE_KVM_STAT_SUPPORT flag Alexander Yarygin
  2014-07-03 13:59 ` [PATCH 2/4] perf kvm: Simplify of exit reasons tables definitions Alexander Yarygin
@ 2014-07-03 13:59 ` Alexander Yarygin
  2014-07-16 19:16   ` [tip:perf/core] " tip-bot for Alexander Yarygin
  2014-07-03 14:08 ` [PATCH 4/4] perf: Allow to use cpuinfo on s390 Alexander Yarygin
  2014-07-03 14:47 ` [PATCH 0/4] perf kvm: Refactoring and small improvements Christian Borntraeger
  4 siblings, 1 reply; 11+ messages in thread
From: Alexander Yarygin @ 2014-07-03 13:59 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: David Ahern, Peter Zijlstra, Paul Mackerras,
	Arnaldo Carvalho de Melo, Christian Borntraeger, Cornelia Huck,
	linux-kernel, Alexander Yarygin

cpu_isa_config() does two different things: searching for cpuid and
initializing perf_kvm_stat struct with proper parameters.

Let's move initialization to a separate function cpu_isa_init(), which
is used to initialize all possible ISAs and can be used to init
arch-depended things.

Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: David Ahern <dsahern@gmail.com>
---
 tools/perf/builtin-kvm.c |   39 +++++++++++++++++++++++----------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 75f3544..41dbeaf 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -835,36 +835,45 @@ static int process_sample_event(struct perf_tool *tool,
 	return 0;
 }
 
+static int cpu_isa_init(struct perf_kvm_stat *kvm, const char *cpuid)
+{
+	if (strstr(cpuid, "Intel")) {
+		kvm->exit_reasons = vmx_exit_reasons;
+		kvm->exit_reasons_isa = "VMX";
+	} else if (strstr(cpuid, "AMD")) {
+		kvm->exit_reasons = svm_exit_reasons;
+		kvm->exit_reasons_isa = "SVM";
+	} else
+		return -ENOTSUP;
+
+	return 0;
+}
+
 static int cpu_isa_config(struct perf_kvm_stat *kvm)
 {
 	char buf[64], *cpuid;
-	int err, isa;
+	int err;
 
 	if (kvm->live) {
 		err = get_cpuid(buf, sizeof(buf));
 		if (err != 0) {
-			pr_err("Failed to look up CPU type (Intel or AMD)\n");
+			pr_err("Failed to look up CPU type\n");
 			return err;
 		}
 		cpuid = buf;
 	} else
 		cpuid = kvm->session->header.env.cpuid;
 
-	if (strstr(cpuid, "Intel"))
-		isa = 1;
-	else if (strstr(cpuid, "AMD"))
-		isa = 0;
-	else {
-		pr_err("CPU %s is not supported.\n", cpuid);
-		return -ENOTSUP;
+	if (!cpuid) {
+		pr_err("Failed to look up CPU type\n");
+		return -EINVAL;
 	}
 
-	if (isa == 1) {
-		kvm->exit_reasons = vmx_exit_reasons;
-		kvm->exit_reasons_isa = "VMX";
-	}
+	err = cpu_isa_init(kvm, cpuid);
+	if (err == -ENOTSUP)
+		pr_err("CPU %s is not supported.\n", cpuid);
 
-	return 0;
+	return err;
 }
 
 static bool verify_vcpu(int vcpu)
@@ -1583,8 +1592,6 @@ static int kvm_cmd_stat(const char *file_name, int argc, const char **argv)
 		.report_event	= "vmexit",
 		.sort_key	= "sample",
 
-		.exit_reasons = svm_exit_reasons,
-		.exit_reasons_isa = "SVM",
 	};
 
 	if (argc == 1) {
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 4/4] perf: Allow to use cpuinfo on s390
  2014-07-03 13:59 [PATCH 0/4] perf kvm: Refactoring and small improvements Alexander Yarygin
                   ` (2 preceding siblings ...)
  2014-07-03 13:59 ` [PATCH 3/4] perf kvm: Refactoring of cpu_isa_config() Alexander Yarygin
@ 2014-07-03 14:08 ` Alexander Yarygin
  2014-07-16 19:16   ` [tip:perf/core] perf tools: " tip-bot for Alexander Yarygin
  2014-07-03 14:47 ` [PATCH 0/4] perf kvm: Refactoring and small improvements Christian Borntraeger
  4 siblings, 1 reply; 11+ messages in thread
From: Alexander Yarygin @ 2014-07-03 14:08 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: David Ahern, Peter Zijlstra, Paul Mackerras,
	Arnaldo Carvalho de Melo, Christian Borntraeger, Cornelia Huck,
	linux-kernel


This patch defines CPUINFO_PROC for s390 and implements get_cpuid().

Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Reviewed-by: David Ahern <dsahern@gmail.com>
---
 tools/perf/arch/s390/Makefile      |    1 +
 tools/perf/arch/s390/util/header.c |   28 ++++++++++++++++++++++++++++
 tools/perf/perf-sys.h              |    1 +
 3 files changed, 30 insertions(+)
 create mode 100644 tools/perf/arch/s390/util/header.c

diff --git a/tools/perf/arch/s390/Makefile b/tools/perf/arch/s390/Makefile
index 15130b5..744e629 100644
--- a/tools/perf/arch/s390/Makefile
+++ b/tools/perf/arch/s390/Makefile
@@ -2,3 +2,4 @@ ifndef NO_DWARF
 PERF_HAVE_DWARF_REGS := 1
 LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/dwarf-regs.o
 endif
+LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/header.o
diff --git a/tools/perf/arch/s390/util/header.c b/tools/perf/arch/s390/util/header.c
new file mode 100644
index 0000000..9fa6c3e
--- /dev/null
+++ b/tools/perf/arch/s390/util/header.c
@@ -0,0 +1,28 @@
+/*
+ * Implementation of get_cpuid().
+ *
+ * Copyright 2014 IBM Corp.
+ * Author(s): Alexander Yarygin <yarygin@linux.vnet.ibm.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License (version 2 only)
+ * as published by the Free Software Foundation.
+ */
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "../../util/header.h"
+
+int get_cpuid(char *buffer, size_t sz)
+{
+	const char *cpuid = "IBM/S390";
+
+	if (strlen(cpuid) + 1 > sz)
+		return -1;
+
+	strcpy(buffer, cpuid);
+	return 0;
+}
diff --git a/tools/perf/perf-sys.h b/tools/perf/perf-sys.h
index 5268a14..937e432 100644
--- a/tools/perf/perf-sys.h
+++ b/tools/perf/perf-sys.h
@@ -54,6 +54,7 @@
 #define mb()		asm volatile("bcr 15,0" ::: "memory")
 #define wmb()		asm volatile("bcr 15,0" ::: "memory")
 #define rmb()		asm volatile("bcr 15,0" ::: "memory")
+#define CPUINFO_PROC	"vendor_id"
 #endif
 
 #ifdef __sh__
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 0/4] perf kvm: Refactoring and small improvements
  2014-07-03 13:59 [PATCH 0/4] perf kvm: Refactoring and small improvements Alexander Yarygin
                   ` (3 preceding siblings ...)
  2014-07-03 14:08 ` [PATCH 4/4] perf: Allow to use cpuinfo on s390 Alexander Yarygin
@ 2014-07-03 14:47 ` Christian Borntraeger
  2014-07-03 15:22   ` Arnaldo Carvalho de Melo
  4 siblings, 1 reply; 11+ messages in thread
From: Christian Borntraeger @ 2014-07-03 14:47 UTC (permalink / raw)
  To: Alexander Yarygin, Jiri Olsa
  Cc: David Ahern, Peter Zijlstra, Paul Mackerras,
	Arnaldo Carvalho de Melo, Cornelia Huck, linux-kernel,
	Paolo Bonzini

On 03/07/14 15:59, Alexander Yarygin wrote:
> Hello,
> 
> We divided patch series "perf/s390/kvm: trace events, perf kvm stat"
> into 2 parts.
> 
> This patch set is a preparation for the next one, which adds support for
> perf kvm stat support on s390.
> 
> Patch 1 removes direct dependence of perf kvm stat from x86.
> Patches 2-3 are refactoring.
> Patch 4 adds arch/s390/header.c to be used by perf kvm stat on s390.
> 
> Compared to the previous version, patches contain some minor style/typo fixes.
> 
> Link to the previous thread: https://lkml.org/lkml/2014/4/25/331
> (mirror: http://marc.info/?l=linux-kernel&m=139841718926897)
> 
> Please consider to merge.
> 
> Thanks.
> 
> Alexander Yarygin (4):
>   perf kvm: Introduce HAVE_KVM_STAT_SUPPORT flag
>   perf kvm: Simplify of exit reasons tables definitions
>   perf kvm: Refactoring of cpu_isa_config()
>   perf: Allow to use cpuinfo on s390
> 
>  tools/perf/arch/s390/Makefile      |    1 +
>  tools/perf/arch/s390/util/header.c |   28 ++++++++++++++
>  tools/perf/arch/x86/Makefile       |    1 +
>  tools/perf/builtin-kvm.c           |   72 +++++++++++++++++++-----------------
>  tools/perf/config/Makefile         |    4 ++
>  tools/perf/perf-sys.h              |    1 +
>  6 files changed, 73 insertions(+), 34 deletions(-)
>  create mode 100644 tools/perf/arch/s390/util/header.c
> 
> --
> 1.7.9.5
> 

CCing Paolo to allow him to comment.

FWIW, all patches
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Should be good for next merge window.




^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 0/4] perf kvm: Refactoring and small improvements
  2014-07-03 14:47 ` [PATCH 0/4] perf kvm: Refactoring and small improvements Christian Borntraeger
@ 2014-07-03 15:22   ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 11+ messages in thread
From: Arnaldo Carvalho de Melo @ 2014-07-03 15:22 UTC (permalink / raw)
  To: Christian Borntraeger
  Cc: Alexander Yarygin, Jiri Olsa, David Ahern, Peter Zijlstra,
	Paul Mackerras, Cornelia Huck, linux-kernel, Paolo Bonzini

Em Thu, Jul 03, 2014 at 04:47:04PM +0200, Christian Borntraeger escreveu:
> FWIW, all patches
> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
> Should be good for next merge window.

Ok, thanks for work and for the reviewing, applying to my perf/core
branch.

- Arnaldo

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [tip:perf/core] perf kvm: Introduce HAVE_KVM_STAT_SUPPORT flag
  2014-07-03 13:59 ` [PATCH 1/4] perf kvm: Introduce HAVE_KVM_STAT_SUPPORT flag Alexander Yarygin
@ 2014-07-16 19:15   ` tip-bot for Alexander Yarygin
  0 siblings, 0 replies; 11+ messages in thread
From: tip-bot for Alexander Yarygin @ 2014-07-16 19:15 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, linux-kernel, paulus, hpa, mingo, a.p.zijlstra,
	borntraeger, jolsa, cornelia.huck, yarygin, dsahern, tglx

Commit-ID:  da50ad69723111e0292f1943dad77b41bb9a25b0
Gitweb:     http://git.kernel.org/tip/da50ad69723111e0292f1943dad77b41bb9a25b0
Author:     Alexander Yarygin <yarygin@linux.vnet.ibm.com>
AuthorDate: Thu, 3 Jul 2014 17:59:49 +0400
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 7 Jul 2014 16:55:23 -0300

perf kvm: Introduce HAVE_KVM_STAT_SUPPORT flag

kvm stat support is currently conditional on i386/x86_64. Let's abstract
this into a HAVE_KVM_STAT_SUPPORT flag, so that other architectures can
support kvm stat as well.

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-2-git-send-email-yarygin@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/arch/x86/Makefile | 1 +
 tools/perf/builtin-kvm.c     | 6 +++---
 tools/perf/config/Makefile   | 4 ++++
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/tools/perf/arch/x86/Makefile b/tools/perf/arch/x86/Makefile
index 1641542..d393901 100644
--- a/tools/perf/arch/x86/Makefile
+++ b/tools/perf/arch/x86/Makefile
@@ -15,3 +15,4 @@ endif
 LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/header.o
 LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/tsc.o
 LIB_H += arch/$(ARCH)/util/tsc.h
+HAVE_KVM_STAT_SUPPORT := 1
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 0f1e5a2..214ec0e 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -29,7 +29,7 @@
 #include <pthread.h>
 #include <math.h>
 
-#if defined(__i386__) || defined(__x86_64__)
+#ifdef HAVE_KVM_STAT_SUPPORT
 #include <asm/svm.h>
 #include <asm/vmx.h>
 #include <asm/kvm.h>
@@ -1609,7 +1609,7 @@ static int kvm_cmd_stat(const char *file_name, int argc, const char **argv)
 perf_stat:
 	return cmd_stat(argc, argv, NULL);
 }
-#endif
+#endif /* HAVE_KVM_STAT_SUPPORT */
 
 static int __cmd_record(const char *file_name, int argc, const char **argv)
 {
@@ -1726,7 +1726,7 @@ int cmd_kvm(int argc, const char **argv, const char *prefix __maybe_unused)
 		return cmd_top(argc, argv, NULL);
 	else if (!strncmp(argv[0], "buildid-list", 12))
 		return __cmd_buildid_list(file_name, argc, argv);
-#if defined(__i386__) || defined(__x86_64__)
+#ifdef HAVE_KVM_STAT_SUPPORT
 	else if (!strncmp(argv[0], "stat", 4))
 		return kvm_cmd_stat(file_name, argc, argv);
 #endif
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index 346bdb6..b7f42d5 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -594,6 +594,10 @@ ifndef NO_LIBNUMA
   endif
 endif
 
+ifdef HAVE_KVM_STAT_SUPPORT
+    CFLAGS += -DHAVE_KVM_STAT_SUPPORT
+endif
+
 # Among the variables below, these:
 #   perfexecdir
 #   template_dir

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [tip:perf/core] perf kvm: Simplify exit reasons tables definitions
  2014-07-03 13:59 ` [PATCH 2/4] perf kvm: Simplify of exit reasons tables definitions Alexander Yarygin
@ 2014-07-16 19:16   ` tip-bot for Alexander Yarygin
  0 siblings, 0 replies; 11+ messages in thread
From: tip-bot for Alexander Yarygin @ 2014-07-16 19:16 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, linux-kernel, paulus, hpa, mingo, a.p.zijlstra,
	borntraeger, jolsa, cornelia.huck, yarygin, dsahern, tglx

Commit-ID:  df74c13b6c53c97576652f7b2840764ad7d5f949
Gitweb:     http://git.kernel.org/tip/df74c13b6c53c97576652f7b2840764ad7d5f949
Author:     Alexander Yarygin <yarygin@linux.vnet.ibm.com>
AuthorDate: Thu, 3 Jul 2014 17:59:50 +0400
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 7 Jul 2014 16:55:24 -0300

perf kvm: Simplify exit reasons tables definitions

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 214ec0e..75f3544 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",
 	};
 

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [tip:perf/core] perf kvm: Refactoring of cpu_isa_config()
  2014-07-03 13:59 ` [PATCH 3/4] perf kvm: Refactoring of cpu_isa_config() Alexander Yarygin
@ 2014-07-16 19:16   ` tip-bot for Alexander Yarygin
  0 siblings, 0 replies; 11+ messages in thread
From: tip-bot for Alexander Yarygin @ 2014-07-16 19:16 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, linux-kernel, paulus, hpa, mingo, a.p.zijlstra,
	borntraeger, jolsa, cornelia.huck, yarygin, dsahern, tglx

Commit-ID:  65c647a65c155e69bd5765d5e454982566ac1c62
Gitweb:     http://git.kernel.org/tip/65c647a65c155e69bd5765d5e454982566ac1c62
Author:     Alexander Yarygin <yarygin@linux.vnet.ibm.com>
AuthorDate: Thu, 3 Jul 2014 17:59:51 +0400
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 7 Jul 2014 16:55:24 -0300

perf kvm: Refactoring of cpu_isa_config()

cpu_isa_config() does two different things: searching for cpuid and
initializing perf_kvm_stat struct with proper parameters.

Let's move initialization to a separate function cpu_isa_init(), which
is used to initialize all possible ISAs and can be used to init
arch-depended things.

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-4-git-send-email-yarygin@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-kvm.c | 39 +++++++++++++++++++++++----------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 75f3544..41dbeaf 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -835,36 +835,45 @@ static int process_sample_event(struct perf_tool *tool,
 	return 0;
 }
 
+static int cpu_isa_init(struct perf_kvm_stat *kvm, const char *cpuid)
+{
+	if (strstr(cpuid, "Intel")) {
+		kvm->exit_reasons = vmx_exit_reasons;
+		kvm->exit_reasons_isa = "VMX";
+	} else if (strstr(cpuid, "AMD")) {
+		kvm->exit_reasons = svm_exit_reasons;
+		kvm->exit_reasons_isa = "SVM";
+	} else
+		return -ENOTSUP;
+
+	return 0;
+}
+
 static int cpu_isa_config(struct perf_kvm_stat *kvm)
 {
 	char buf[64], *cpuid;
-	int err, isa;
+	int err;
 
 	if (kvm->live) {
 		err = get_cpuid(buf, sizeof(buf));
 		if (err != 0) {
-			pr_err("Failed to look up CPU type (Intel or AMD)\n");
+			pr_err("Failed to look up CPU type\n");
 			return err;
 		}
 		cpuid = buf;
 	} else
 		cpuid = kvm->session->header.env.cpuid;
 
-	if (strstr(cpuid, "Intel"))
-		isa = 1;
-	else if (strstr(cpuid, "AMD"))
-		isa = 0;
-	else {
-		pr_err("CPU %s is not supported.\n", cpuid);
-		return -ENOTSUP;
+	if (!cpuid) {
+		pr_err("Failed to look up CPU type\n");
+		return -EINVAL;
 	}
 
-	if (isa == 1) {
-		kvm->exit_reasons = vmx_exit_reasons;
-		kvm->exit_reasons_isa = "VMX";
-	}
+	err = cpu_isa_init(kvm, cpuid);
+	if (err == -ENOTSUP)
+		pr_err("CPU %s is not supported.\n", cpuid);
 
-	return 0;
+	return err;
 }
 
 static bool verify_vcpu(int vcpu)
@@ -1583,8 +1592,6 @@ static int kvm_cmd_stat(const char *file_name, int argc, const char **argv)
 		.report_event	= "vmexit",
 		.sort_key	= "sample",
 
-		.exit_reasons = svm_exit_reasons,
-		.exit_reasons_isa = "SVM",
 	};
 
 	if (argc == 1) {

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [tip:perf/core] perf tools: Allow to use cpuinfo on s390
  2014-07-03 14:08 ` [PATCH 4/4] perf: Allow to use cpuinfo on s390 Alexander Yarygin
@ 2014-07-16 19:16   ` tip-bot for Alexander Yarygin
  0 siblings, 0 replies; 11+ messages in thread
From: tip-bot for Alexander Yarygin @ 2014-07-16 19:16 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, linux-kernel, paulus, hpa, mingo, a.p.zijlstra,
	borntraeger, jolsa, cornelia.huck, yarygin, dsahern, tglx

Commit-ID:  f8d9ccde2be4c24bfb8787af36a59a981b00a02d
Gitweb:     http://git.kernel.org/tip/f8d9ccde2be4c24bfb8787af36a59a981b00a02d
Author:     Alexander Yarygin <yarygin@linux.vnet.ibm.com>
AuthorDate: Thu, 3 Jul 2014 18:08:22 +0400
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 7 Jul 2014 16:55:24 -0300

perf tools: Allow to use cpuinfo on s390

This patch defines CPUINFO_PROC for s390 and implements get_cpuid().

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/87ioneo7qh.wl%yarygin@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/arch/s390/Makefile      |  1 +
 tools/perf/arch/s390/util/header.c | 28 ++++++++++++++++++++++++++++
 tools/perf/perf-sys.h              |  1 +
 3 files changed, 30 insertions(+)

diff --git a/tools/perf/arch/s390/Makefile b/tools/perf/arch/s390/Makefile
index 15130b5..744e629 100644
--- a/tools/perf/arch/s390/Makefile
+++ b/tools/perf/arch/s390/Makefile
@@ -2,3 +2,4 @@ ifndef NO_DWARF
 PERF_HAVE_DWARF_REGS := 1
 LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/dwarf-regs.o
 endif
+LIB_OBJS += $(OUTPUT)arch/$(ARCH)/util/header.o
diff --git a/tools/perf/arch/s390/util/header.c b/tools/perf/arch/s390/util/header.c
new file mode 100644
index 0000000..9fa6c3e
--- /dev/null
+++ b/tools/perf/arch/s390/util/header.c
@@ -0,0 +1,28 @@
+/*
+ * Implementation of get_cpuid().
+ *
+ * Copyright 2014 IBM Corp.
+ * Author(s): Alexander Yarygin <yarygin@linux.vnet.ibm.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License (version 2 only)
+ * as published by the Free Software Foundation.
+ */
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "../../util/header.h"
+
+int get_cpuid(char *buffer, size_t sz)
+{
+	const char *cpuid = "IBM/S390";
+
+	if (strlen(cpuid) + 1 > sz)
+		return -1;
+
+	strcpy(buffer, cpuid);
+	return 0;
+}
diff --git a/tools/perf/perf-sys.h b/tools/perf/perf-sys.h
index 5268a14..937e432 100644
--- a/tools/perf/perf-sys.h
+++ b/tools/perf/perf-sys.h
@@ -54,6 +54,7 @@
 #define mb()		asm volatile("bcr 15,0" ::: "memory")
 #define wmb()		asm volatile("bcr 15,0" ::: "memory")
 #define rmb()		asm volatile("bcr 15,0" ::: "memory")
+#define CPUINFO_PROC	"vendor_id"
 #endif
 
 #ifdef __sh__

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2014-07-16 19:17 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-03 13:59 [PATCH 0/4] perf kvm: Refactoring and small improvements Alexander Yarygin
2014-07-03 13:59 ` [PATCH 1/4] perf kvm: Introduce HAVE_KVM_STAT_SUPPORT flag Alexander Yarygin
2014-07-16 19:15   ` [tip:perf/core] " tip-bot for Alexander Yarygin
2014-07-03 13:59 ` [PATCH 2/4] perf kvm: Simplify of exit reasons tables definitions Alexander Yarygin
2014-07-16 19:16   ` [tip:perf/core] perf kvm: Simplify " tip-bot for Alexander Yarygin
2014-07-03 13:59 ` [PATCH 3/4] perf kvm: Refactoring of cpu_isa_config() Alexander Yarygin
2014-07-16 19:16   ` [tip:perf/core] " tip-bot for Alexander Yarygin
2014-07-03 14:08 ` [PATCH 4/4] perf: Allow to use cpuinfo on s390 Alexander Yarygin
2014-07-16 19:16   ` [tip:perf/core] perf tools: " tip-bot for Alexander Yarygin
2014-07-03 14:47 ` [PATCH 0/4] perf kvm: Refactoring and small improvements Christian Borntraeger
2014-07-03 15:22   ` Arnaldo Carvalho de Melo

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.