Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2bff2b82 authored by Anju T Sudhakar's avatar Anju T Sudhakar Committed by Arnaldo Carvalho de Melo
Browse files

perf kvm stat: Set 'trace_cycles' as default event for 'perf kvm record' in powerpc



Use 'trace_imc/trace_cycles' as the default event for 'perf kvm record'
in powerpc.

Signed-off-by: default avatarAnju T Sudhakar <anju@linux.vnet.ibm.com>
Reviewed-by: default avatarRavi Bangoria <ravi.bangoria@linux.ibm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: linuxppc-dev@lists.ozlabs.org
Link: http://lore.kernel.org/lkml/20190718181749.30612-3-anju@linux.vnet.ibm.com


[ Add missing pmu.h header, needed because this patch uses pmu_have_event() ]
Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 124eb5f8
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
#include "util/debug.h"
#include "util/evsel.h"
#include "util/evlist.h"
#include "util/pmu.h"

#include "book3s_hv_exits.h"
#include "book3s_hcalls.h"
@@ -177,8 +178,9 @@ int cpu_isa_init(struct perf_kvm_stat *kvm, const char *cpuid __maybe_unused)
/*
 * Incase of powerpc architecture, pmu registers are programmable
 * by guest kernel. So monitoring guest via host may not provide
 * valid samples. It is better to fail the "perf kvm record"
 * with default "cycles" event to monitor guest in powerpc.
 * valid samples with default 'cycles' event. It is better to use
 * 'trace_imc/trace_cycles' event for guest profiling, since it
 * can track the guest instruction pointer in the trace-record.
 *
 * Function to parse the arguments and return appropriate values.
 */
@@ -202,9 +204,15 @@ int kvm_add_default_arch_event(int *argc, const char **argv)

	parse_options(j, tmp, event_options, NULL, PARSE_OPT_KEEP_UNKNOWN);
	if (!event) {
		if (pmu_have_event("trace_imc", "trace_cycles")) {
			argv[j++] = strdup("-e");
			argv[j++] = strdup("trace_imc/trace_cycles/");
			*argc += 2;
		} else {
			free(tmp);
			return -EINVAL;
		}
	}

	free(tmp);
	return 0;