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=0xc000000000091924 
msr=0x8000000000009032, ceded=0
       0.00%  VCPU 0: trap=HV_DECREMENTER pc=0xc000000000091924 
msr=0x8000000000009032, ceded=0
       0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x10005c7c msr=0x800000000280f032, 
ceded=0
       0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x1001ef14 msr=0x800000000280f032, 
ceded=0
       0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x3fff83398830 
msr=0x800000000280f032, ceded=0
       0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x3fff833a6fe4 
msr=0x800000000280f032, ceded=0
       0.00%  VCPU 8: trap=HV_DECREMENTER pc=0x3fff833a7a64 
msr=0x800000000280f032, 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 Object            Symbol
  # ........  .......  .......................  ..............................
  #
       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 <ravi.bango...@linux.vnet.ibm.com>
---
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 <linux/err.h>
+#include <string.h>
 #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 rec_argc, i = 0, j;
+       int i = 0, j;
        const char **rec_argv;
 
-       rec_argc = argc + 2;
-       rec_argv = calloc(rec_argc + 1, sizeof(char *));
+       *rec_argc = 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);
        for (j = 1; j < argc; j++, i++)
                rec_argv[i] = argv[j];
 
-       BUG_ON(i != rec_argc);
+       BUG_ON(i != *rec_argc);
+
+       return rec_argv;
+}
+
+static int __cmd_report(const char *file_name, int argc, const char **argv)
+{
+       int rec_argc;
+       const char **rec_argv = arch__cmd_kvm_report_argv(file_name, argc,
+                                                         &rec_argc, argv);
 
-       return cmd_report(i, rec_argv, NULL);
+       return cmd_report(rec_argc, rec_argv, NULL);
 }
 
 static int
diff --git a/tools/perf/builtin.h b/tools/perf/builtin.h
index 3f871b5..2ac149b 100644
--- a/tools/perf/builtin.h
+++ b/tools/perf/builtin.h
@@ -41,4 +41,7 @@ extern int cmd_mem(int argc, const char **argv, const char 
*prefix);
 extern int cmd_data(int argc, const char **argv, const char *prefix);
 
 extern int find_scripts(char **scripts_array, char **scripts_path_array);
+
+extern const char **arch__cmd_kvm_report_argv(const char *file_name,
+                       int argc, int *rec_argc, const char **argv);
 #endif
-- 
2.1.4

Reply via email to