diff options
Diffstat (limited to 'arch/s390/kvm/trace.h')
| -rw-r--r-- | arch/s390/kvm/trace.h | 145 | 
1 files changed, 111 insertions, 34 deletions
diff --git a/arch/s390/kvm/trace.h b/arch/s390/kvm/trace.h index c2f582bb1cb..916834d7a73 100644 --- a/arch/s390/kvm/trace.h +++ b/arch/s390/kvm/trace.h @@ -2,8 +2,9 @@  #define _TRACE_KVM_H  #include <linux/tracepoint.h> -#include <asm/sigp.h> +#include <asm/sie.h>  #include <asm/debug.h> +#include <asm/dis.h>  #undef TRACE_SYSTEM  #define TRACE_SYSTEM kvm @@ -29,6 +30,66 @@  	TP_printk("%02d[%016lx-%016lx]: " p_str, __entry->id,		\  		  __entry->pswmask, __entry->pswaddr, p_args) +TRACE_EVENT(kvm_s390_skey_related_inst, +	    TP_PROTO(VCPU_PROTO_COMMON), +	    TP_ARGS(VCPU_ARGS_COMMON), + +	    TP_STRUCT__entry( +		    VCPU_FIELD_COMMON +		    ), + +	    TP_fast_assign( +		    VCPU_ASSIGN_COMMON +		    ), +	    VCPU_TP_PRINTK("%s", "first instruction related to skeys on vcpu") +	); + +TRACE_EVENT(kvm_s390_major_guest_pfault, +	    TP_PROTO(VCPU_PROTO_COMMON), +	    TP_ARGS(VCPU_ARGS_COMMON), + +	    TP_STRUCT__entry( +		    VCPU_FIELD_COMMON +		    ), + +	    TP_fast_assign( +		    VCPU_ASSIGN_COMMON +		    ), +	    VCPU_TP_PRINTK("%s", "major fault, maybe applicable for pfault") +	); + +TRACE_EVENT(kvm_s390_pfault_init, +	    TP_PROTO(VCPU_PROTO_COMMON, long pfault_token), +	    TP_ARGS(VCPU_ARGS_COMMON, pfault_token), + +	    TP_STRUCT__entry( +		    VCPU_FIELD_COMMON +		    __field(long, pfault_token) +		    ), + +	    TP_fast_assign( +		    VCPU_ASSIGN_COMMON +		    __entry->pfault_token = pfault_token; +		    ), +	    VCPU_TP_PRINTK("init pfault token %ld", __entry->pfault_token) +	); + +TRACE_EVENT(kvm_s390_pfault_done, +	    TP_PROTO(VCPU_PROTO_COMMON, long pfault_token), +	    TP_ARGS(VCPU_ARGS_COMMON, pfault_token), + +	    TP_STRUCT__entry( +		    VCPU_FIELD_COMMON +		    __field(long, pfault_token) +		    ), + +	    TP_fast_assign( +		    VCPU_ASSIGN_COMMON +		    __entry->pfault_token = pfault_token; +		    ), +	    VCPU_TP_PRINTK("done pfault token %ld", __entry->pfault_token) +	); +  /*   * Tracepoints for SIE entry and exit.   */ @@ -64,17 +125,6 @@ TRACE_EVENT(kvm_s390_sie_fault,  	    VCPU_TP_PRINTK("%s", "fault in sie instruction")  	); -#define sie_intercept_code				\ -	{0x04, "Instruction"},				\ -	{0x08, "Program interruption"},			\ -	{0x0C, "Instruction and program interruption"},	\ -	{0x10, "External request"},			\ -	{0x14, "External interruption"},		\ -	{0x18, "I/O request"},				\ -	{0x1C, "Wait state"},				\ -	{0x20, "Validity"},				\ -	{0x28, "Stop request"} -  TRACE_EVENT(kvm_s390_sie_exit,  	    TP_PROTO(VCPU_PROTO_COMMON, u8 icptcode),  	    TP_ARGS(VCPU_ARGS_COMMON, icptcode), @@ -104,7 +154,6 @@ TRACE_EVENT(kvm_s390_intercept_instruction,  	    TP_STRUCT__entry(  		    VCPU_FIELD_COMMON  		    __field(__u64, instruction) -		    __field(char, insn[8])  		    ),  	    TP_fast_assign( @@ -115,10 +164,8 @@ TRACE_EVENT(kvm_s390_intercept_instruction,  	    VCPU_TP_PRINTK("intercepted instruction %016llx (%s)",  			   __entry->instruction, -			   insn_to_mnemonic((unsigned char *) -					    &__entry->instruction, -					 __entry->insn, sizeof(__entry->insn)) ? -			   "unknown" : __entry->insn) +			   __print_symbolic(icpt_insn_decoder(__entry->instruction), +					    icpt_insn_codes))  	);  /* @@ -166,17 +213,6 @@ TRACE_EVENT(kvm_s390_intercept_validity,   * Trace points for instructions that are of special interest.   */ -#define sigp_order_codes					\ -	{SIGP_SENSE, "sense"},					\ -	{SIGP_EXTERNAL_CALL, "external call"},			\ -	{SIGP_EMERGENCY_SIGNAL, "emergency signal"},		\ -	{SIGP_STOP, "stop"},					\ -	{SIGP_STOP_AND_STORE_STATUS, "stop and store status"},	\ -	{SIGP_SET_ARCHITECTURE, "set architecture"},		\ -	{SIGP_SET_PREFIX, "set prefix"},			\ -	{SIGP_SENSE_RUNNING, "sense running"},			\ -	{SIGP_RESTART, "restart"} -  TRACE_EVENT(kvm_s390_handle_sigp,  	    TP_PROTO(VCPU_PROTO_COMMON, __u8 order_code, __u16 cpu_addr, \  		     __u32 parameter), @@ -203,12 +239,28 @@ TRACE_EVENT(kvm_s390_handle_sigp,  			   __entry->cpu_addr, __entry->parameter)  	); -#define diagnose_codes				\ -	{0x10, "release pages"},		\ -	{0x44, "time slice end"},		\ -	{0x308, "ipl functions"},		\ -	{0x500, "kvm hypercall"},		\ -	{0x501, "kvm breakpoint"} +TRACE_EVENT(kvm_s390_handle_sigp_pei, +	    TP_PROTO(VCPU_PROTO_COMMON, __u8 order_code, __u16 cpu_addr), +	    TP_ARGS(VCPU_ARGS_COMMON, order_code, cpu_addr), + +	    TP_STRUCT__entry( +		    VCPU_FIELD_COMMON +		    __field(__u8, order_code) +		    __field(__u16, cpu_addr) +		    ), + +	    TP_fast_assign( +		    VCPU_ASSIGN_COMMON +		    __entry->order_code = order_code; +		    __entry->cpu_addr = cpu_addr; +		    ), + +	    VCPU_TP_PRINTK("handle sigp pei order %02x (%s), cpu address %04x", +			   __entry->order_code, +			   __print_symbolic(__entry->order_code, +					    sigp_order_codes), +			   __entry->cpu_addr) +	);  TRACE_EVENT(kvm_s390_handle_diag,  	    TP_PROTO(VCPU_PROTO_COMMON, __u16 code), @@ -253,6 +305,31 @@ TRACE_EVENT(kvm_s390_handle_lctl,  			   __entry->reg1, __entry->reg3, __entry->addr)  	); +TRACE_EVENT(kvm_s390_handle_stctl, +	    TP_PROTO(VCPU_PROTO_COMMON, int g, int reg1, int reg3, u64 addr), +	    TP_ARGS(VCPU_ARGS_COMMON, g, reg1, reg3, addr), + +	    TP_STRUCT__entry( +		    VCPU_FIELD_COMMON +		    __field(int, g) +		    __field(int, reg1) +		    __field(int, reg3) +		    __field(u64, addr) +		    ), + +	    TP_fast_assign( +		    VCPU_ASSIGN_COMMON +		    __entry->g = g; +		    __entry->reg1 = reg1; +		    __entry->reg3 = reg3; +		    __entry->addr = addr; +		    ), + +	    VCPU_TP_PRINTK("%s: storing cr %x-%x to %016llx", +			   __entry->g ? "stctg" : "stctl", +			   __entry->reg1, __entry->reg3, __entry->addr) +	); +  TRACE_EVENT(kvm_s390_handle_prefix,  	    TP_PROTO(VCPU_PROTO_COMMON, int set, u32 address),  	    TP_ARGS(VCPU_ARGS_COMMON, set, address),  | 
