Commit a7244920 authored by James Hogan's avatar James Hogan
Browse files

KVM: MIPS: Extend counters & events for VZ GExcCodes



Extend MIPS KVM stats counters and kvm_transition trace event codes to
cover hypervisor exceptions, which have their own GExcCode field in
CP0_GuestCtl0 with up to 32 hypervisor exception cause codes.

Signed-off-by: default avatarJames Hogan <james.hogan@imgtec.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Radim Krčmář" <rkrcmar@redhat.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: linux-mips@linux-mips.org
Cc: kvm@vger.kernel.org
parent c58cf741
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -145,6 +145,16 @@ struct kvm_vcpu_stat {
	u64 fpe_exits;
	u64 msa_disabled_exits;
	u64 flush_dcache_exits;
#ifdef CONFIG_KVM_MIPS_VZ
	u64 vz_gpsi_exits;
	u64 vz_gsfc_exits;
	u64 vz_hc_exits;
	u64 vz_grr_exits;
	u64 vz_gva_exits;
	u64 vz_ghfc_exits;
	u64 vz_gpa_exits;
	u64 vz_resvd_exits;
#endif
	u64 halt_successful_poll;
	u64 halt_attempted_poll;
	u64 halt_poll_invalid;
+10 −0
Original line number Diff line number Diff line
@@ -59,6 +59,16 @@ struct kvm_stats_debugfs_item debugfs_entries[] = {
	{ "fpe",	  VCPU_STAT(fpe_exits),		 KVM_STAT_VCPU },
	{ "msa_disabled", VCPU_STAT(msa_disabled_exits), KVM_STAT_VCPU },
	{ "flush_dcache", VCPU_STAT(flush_dcache_exits), KVM_STAT_VCPU },
#ifdef CONFIG_KVM_MIPS_VZ
	{ "vz_gpsi",	  VCPU_STAT(vz_gpsi_exits),	 KVM_STAT_VCPU },
	{ "vz_gsfc",	  VCPU_STAT(vz_gsfc_exits),	 KVM_STAT_VCPU },
	{ "vz_hc",	  VCPU_STAT(vz_hc_exits),	 KVM_STAT_VCPU },
	{ "vz_grr",	  VCPU_STAT(vz_grr_exits),	 KVM_STAT_VCPU },
	{ "vz_gva",	  VCPU_STAT(vz_gva_exits),	 KVM_STAT_VCPU },
	{ "vz_ghfc",	  VCPU_STAT(vz_ghfc_exits),	 KVM_STAT_VCPU },
	{ "vz_gpa",	  VCPU_STAT(vz_gpa_exits),	 KVM_STAT_VCPU },
	{ "vz_resvd",	  VCPU_STAT(vz_resvd_exits),	 KVM_STAT_VCPU },
#endif
	{ "halt_successful_poll", VCPU_STAT(halt_successful_poll), KVM_STAT_VCPU },
	{ "halt_attempted_poll", VCPU_STAT(halt_attempted_poll), KVM_STAT_VCPU },
	{ "halt_poll_invalid", VCPU_STAT(halt_poll_invalid), KVM_STAT_VCPU },
+17 −1
Original line number Diff line number Diff line
@@ -66,6 +66,15 @@ DEFINE_EVENT(kvm_transition, kvm_out,
#define KVM_TRACE_EXIT_WAIT		32
#define KVM_TRACE_EXIT_CACHE		33
#define KVM_TRACE_EXIT_SIGNAL		34
/* 32 exit reasons correspond to GuestCtl0.GExcCode (VZ) */
#define KVM_TRACE_EXIT_GEXCCODE_BASE	64
#define KVM_TRACE_EXIT_GPSI		64	/*  0 */
#define KVM_TRACE_EXIT_GSFC		65	/*  1 */
#define KVM_TRACE_EXIT_HC		66	/*  2 */
#define KVM_TRACE_EXIT_GRR		67	/*  3 */
#define KVM_TRACE_EXIT_GVA		72	/*  8 */
#define KVM_TRACE_EXIT_GHFC		73	/*  9 */
#define KVM_TRACE_EXIT_GPA		74	/* 10 */

/* Tracepoints for VM exits */
#define kvm_trace_symbol_exit_types				\
@@ -85,7 +94,14 @@ DEFINE_EVENT(kvm_transition, kvm_out,
	{ KVM_TRACE_EXIT_MSA_DISABLED,	"MSA Disabled" },	\
	{ KVM_TRACE_EXIT_WAIT,		"WAIT" },		\
	{ KVM_TRACE_EXIT_CACHE,		"CACHE" },		\
	{ KVM_TRACE_EXIT_SIGNAL,	"Signal" }
	{ KVM_TRACE_EXIT_SIGNAL,	"Signal" },		\
	{ KVM_TRACE_EXIT_GPSI,		"GPSI" },		\
	{ KVM_TRACE_EXIT_GSFC,		"GSFC" },		\
	{ KVM_TRACE_EXIT_HC,		"HC" },			\
	{ KVM_TRACE_EXIT_GRR,		"GRR" },		\
	{ KVM_TRACE_EXIT_GVA,		"GVA" },		\
	{ KVM_TRACE_EXIT_GHFC,		"GHFC" },		\
	{ KVM_TRACE_EXIT_GPA,		"GPA" }

TRACE_EVENT(kvm_exit,
	    TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason),