[PATCH v2 3/3] perf kvm: Fix output fields instead of 'trace' for perf kvm report on powerpc

2016-01-21 Thread Ravi Bangoria
commit d49dadea7862 ("perf tools: Make 'trace' or 'trace_fields' sort key
default for tracepoint events") makes 'trace' sort key as a default
while displaying report for tracepoint.

As tracepoint(kvm_hv:kvm_guest_exit) is used as a default event for
recording data, perf kvm report will display output as a list of
tracepoint hits and not with a normal report columns.

This patch will replace 'overhead,comm,dso,sym' fields instead of 'trace'
while displaying perf kvm report on powerpc.

Before applying patch:

  $ ./perf kvm --guestkallsyms=guest.kallsyms --guestmodules=guest.modules 
report --stdio
  # To display the perf.data header info, please use --header/--header-only 
options.
  #
  #
  # Total Lost Samples: 0
  #
  # Samples: 181K of event 'kvm_hv:kvm_guest_exit'
  # Event count (approx.): 181061
  #
  # Overhead  Trace output
  #   
.
  #
   0.02%  VCPU 8: trap=HV_DECREMENTER pc=0xc0091924 
msr=0x80009032, ceded=0
   0.00%  VCPU 0: trap=HV_DECREMENTER pc=0xc0091924 
msr=0x80009032, ceded=0
   0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x10005c7c msr=0x8280f032, 
ceded=0
   0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x1001ef14 msr=0x8280f032, 
ceded=0
   0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x3fff83398830 
msr=0x8280f032, ceded=0
   0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x3fff833a6fe4 
msr=0x8280f032, ceded=0
   0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x3fff833a7a64 
msr=0x8280f032, ceded=0

After applying patch:

  $ ./perf kvm --guestkallsyms=guest.kallsyms --guestmodules=guest.modules 
report --stdio
  # To display the perf.data header info, please use --header/--header-only 
options.
  #
  #
  # Total Lost Samples: 0
  #
  # Samples: 181K of event 'kvm_hv:kvm_guest_exit'
  # Event count (approx.): 181061
  #
  # Overhead  Command  Shared ObjectSymbol
  #   ...  ...  ..
  #
   0.02%  :57276   [guest.kernel.kallsyms]  [g] .plpar_hcall_norets
   0.00%  :57274   [guest.kernel.kallsyms]  [g] .plpar_hcall_norets
   0.00%  :57276   [guest.kernel.kallsyms]  [g] .__copy_tofrom_user_power7
   0.00%  :57276   [guest.kernel.kallsyms]  [g] ._atomic_dec_and_lock
   0.00%  :57276   [guest.kernel.kallsyms]  [g] ._raw_spin_lock
   0.00%  :57276   [guest.kernel.kallsyms]  [g] ._switch
   0.00%  :57276   [guest.kernel.kallsyms]  [g] .bio_add_page
   0.00%  :57276   [guest.kernel.kallsyms]  [g] .kmem_cache_alloc

Signed-off-by: Ravi Bangoria 
---
changes in v2:
- Fixes output format of perf kvm report on powerpc

 tools/perf/arch/powerpc/util/kvm.c | 30 ++
 tools/perf/builtin-kvm.c   | 23 +--
 tools/perf/builtin.h   |  3 +++
 3 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/tools/perf/arch/powerpc/util/kvm.c 
b/tools/perf/arch/powerpc/util/kvm.c
index 317f29a..e5d88cc 100644
--- a/tools/perf/arch/powerpc/util/kvm.c
+++ b/tools/perf/arch/powerpc/util/kvm.c
@@ -8,11 +8,13 @@
  */
 
 #include 
+#include 
 #include "../../../util/evsel.h"
 #include "../../../util/evlist.h"
 #include "../../../util/trace-event.h"
 #include "../../../util/session.h"
 #include "../../../util/util.h"
+#include "../../../builtin.h"
 
 #define KVMPPC_EXIT "kvm_hv:kvm_guest_exit"
 #define HV_DECREMENTER 2432
@@ -102,3 +104,31 @@ u8 arch__get_cpumode(const union perf_event *event, struct 
perf_evsel *evsel,
 ret:
return cpumode;
 }
+
+const char **arch__cmd_kvm_report_argv(const char *file_name, int argc,
+  int *rec_argc, const char **argv)
+{
+   int i = 0, j, arch_argc = 0;
+   const char **rec_argv;
+
+   if (perf_guest_only())
+   arch_argc = 2;
+
+   *rec_argc = argc + arch_argc + 2;
+   rec_argv = calloc(*rec_argc + 1, sizeof(char *));
+   rec_argv[i++] = strdup("report");
+   rec_argv[i++] = strdup("-i");
+   rec_argv[i++] = strdup(file_name);
+
+   if (arch_argc) {
+   rec_argv[i++] = strdup("-F");
+   rec_argv[i++] = strdup("overhead,comm,dso,sym");
+   }
+
+   for (j = 1; j < argc; j++, i++)
+   rec_argv[i] = argv[j];
+
+   BUG_ON(i != *rec_argc);
+
+   return rec_argv;
+}
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 4418d92..48455c9 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -1480,22 +1480,33 @@ static int __cmd_record(const char *file_name, int 
argc, const char **argv)
return cmd_record(i, rec_argv, NULL);
 }
 
-static int __cmd_report(const char *file_name, int argc, const char **argv)
+
+const char ** __weak arch__cmd_kvm_report_argv(const char *file_name, int argc,
+  int *rec_argc, const char **argv)
 {
-   int 

[PATCH v2 3/3] perf kvm: Fix output fields instead of 'trace' for perf kvm report on powerpc

2016-01-21 Thread Ravi Bangoria
commit d49dadea7862 ("perf tools: Make 'trace' or 'trace_fields' sort key
default for tracepoint events") makes 'trace' sort key as a default
while displaying report for tracepoint.

As tracepoint(kvm_hv:kvm_guest_exit) is used as a default event for
recording data, perf kvm report will display output as a list of
tracepoint hits and not with a normal report columns.

This patch will replace 'overhead,comm,dso,sym' fields instead of 'trace'
while displaying perf kvm report on powerpc.

Before applying patch:

  $ ./perf kvm --guestkallsyms=guest.kallsyms --guestmodules=guest.modules 
report --stdio
  # To display the perf.data header info, please use --header/--header-only 
options.
  #
  #
  # Total Lost Samples: 0
  #
  # Samples: 181K of event 'kvm_hv:kvm_guest_exit'
  # Event count (approx.): 181061
  #
  # Overhead  Trace output
  #   
.
  #
   0.02%  VCPU 8: trap=HV_DECREMENTER pc=0xc0091924 
msr=0x80009032, ceded=0
   0.00%  VCPU 0: trap=HV_DECREMENTER pc=0xc0091924 
msr=0x80009032, ceded=0
   0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x10005c7c msr=0x8280f032, 
ceded=0
   0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x1001ef14 msr=0x8280f032, 
ceded=0
   0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x3fff83398830 
msr=0x8280f032, ceded=0
   0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x3fff833a6fe4 
msr=0x8280f032, ceded=0
   0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x3fff833a7a64 
msr=0x8280f032, ceded=0

After applying patch:

  $ ./perf kvm --guestkallsyms=guest.kallsyms --guestmodules=guest.modules 
report --stdio
  # To display the perf.data header info, please use --header/--header-only 
options.
  #
  #
  # Total Lost Samples: 0
  #
  # Samples: 181K of event 'kvm_hv:kvm_guest_exit'
  # Event count (approx.): 181061
  #
  # Overhead  Command  Shared ObjectSymbol
  #   ...  ...  ..
  #
   0.02%  :57276   [guest.kernel.kallsyms]  [g] .plpar_hcall_norets
   0.00%  :57274   [guest.kernel.kallsyms]  [g] .plpar_hcall_norets
   0.00%  :57276   [guest.kernel.kallsyms]  [g] .__copy_tofrom_user_power7
   0.00%  :57276   [guest.kernel.kallsyms]  [g] ._atomic_dec_and_lock
   0.00%  :57276   [guest.kernel.kallsyms]  [g] ._raw_spin_lock
   0.00%  :57276   [guest.kernel.kallsyms]  [g] ._switch
   0.00%  :57276   [guest.kernel.kallsyms]  [g] .bio_add_page
   0.00%  :57276   [guest.kernel.kallsyms]  [g] .kmem_cache_alloc

Signed-off-by: Ravi Bangoria 
---
changes in v2:
- Fixes output format of perf kvm report on powerpc

 tools/perf/arch/powerpc/util/kvm.c | 30 ++
 tools/perf/builtin-kvm.c   | 23 +--
 tools/perf/builtin.h   |  3 +++
 3 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/tools/perf/arch/powerpc/util/kvm.c 
b/tools/perf/arch/powerpc/util/kvm.c
index 317f29a..e5d88cc 100644
--- a/tools/perf/arch/powerpc/util/kvm.c
+++ b/tools/perf/arch/powerpc/util/kvm.c
@@ -8,11 +8,13 @@
  */
 
 #include 
+#include 
 #include "../../../util/evsel.h"
 #include "../../../util/evlist.h"
 #include "../../../util/trace-event.h"
 #include "../../../util/session.h"
 #include "../../../util/util.h"
+#include "../../../builtin.h"
 
 #define KVMPPC_EXIT "kvm_hv:kvm_guest_exit"
 #define HV_DECREMENTER 2432
@@ -102,3 +104,31 @@ u8 arch__get_cpumode(const union perf_event *event, struct 
perf_evsel *evsel,
 ret:
return cpumode;
 }
+
+const char **arch__cmd_kvm_report_argv(const char *file_name, int argc,
+  int *rec_argc, const char **argv)
+{
+   int i = 0, j, arch_argc = 0;
+   const char **rec_argv;
+
+   if (perf_guest_only())
+   arch_argc = 2;
+
+   *rec_argc = argc + arch_argc + 2;
+   rec_argv = calloc(*rec_argc + 1, sizeof(char *));
+   rec_argv[i++] = strdup("report");
+   rec_argv[i++] = strdup("-i");
+   rec_argv[i++] = strdup(file_name);
+
+   if (arch_argc) {
+   rec_argv[i++] = strdup("-F");
+   rec_argv[i++] = strdup("overhead,comm,dso,sym");
+   }
+
+   for (j = 1; j < argc; j++, i++)
+   rec_argv[i] = argv[j];
+
+   BUG_ON(i != *rec_argc);
+
+   return rec_argv;
+}
diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c
index 4418d92..48455c9 100644
--- a/tools/perf/builtin-kvm.c
+++ b/tools/perf/builtin-kvm.c
@@ -1480,22 +1480,33 @@ static int __cmd_record(const char *file_name, int 
argc, const char **argv)
return cmd_record(i, rec_argv, NULL);
 }
 
-static int __cmd_report(const char *file_name, int argc, const char **argv)
+
+const char ** __weak arch__cmd_kvm_report_argv(const char *file_name, int argc,
+  int *rec_argc,