xref: /openbmc/linux/arch/s390/kvm/trace.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
25786fffaSCornelia Huck #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
35786fffaSCornelia Huck #define _TRACE_KVM_H
45786fffaSCornelia Huck 
55786fffaSCornelia Huck #include <linux/tracepoint.h>
66de1bf88SAlexander Yarygin #include <asm/sie.h>
75786fffaSCornelia Huck #include <asm/debug.h>
80f20822aSHeiko Carstens #include <asm/dis.h>
95786fffaSCornelia Huck 
105786fffaSCornelia Huck #undef TRACE_SYSTEM
115786fffaSCornelia Huck #define TRACE_SYSTEM kvm
125786fffaSCornelia Huck #define TRACE_INCLUDE_PATH .
135786fffaSCornelia Huck #undef TRACE_INCLUDE_FILE
145786fffaSCornelia Huck #define TRACE_INCLUDE_FILE trace
155786fffaSCornelia Huck 
165786fffaSCornelia Huck /*
175786fffaSCornelia Huck  * Helpers for vcpu-specific tracepoints containing the same information
185786fffaSCornelia Huck  * as s390dbf VCPU_EVENTs.
195786fffaSCornelia Huck  */
205786fffaSCornelia Huck #define VCPU_PROTO_COMMON struct kvm_vcpu *vcpu
215786fffaSCornelia Huck #define VCPU_ARGS_COMMON vcpu
225786fffaSCornelia Huck #define VCPU_FIELD_COMMON __field(int, id)			\
235786fffaSCornelia Huck 	__field(unsigned long, pswmask)				\
245786fffaSCornelia Huck 	__field(unsigned long, pswaddr)
255786fffaSCornelia Huck #define VCPU_ASSIGN_COMMON do {						\
265786fffaSCornelia Huck 	__entry->id = vcpu->vcpu_id;					\
275786fffaSCornelia Huck 	__entry->pswmask = vcpu->arch.sie_block->gpsw.mask;		\
285786fffaSCornelia Huck 	__entry->pswaddr = vcpu->arch.sie_block->gpsw.addr;		\
295786fffaSCornelia Huck 	} while (0);
305786fffaSCornelia Huck #define VCPU_TP_PRINTK(p_str, p_args...)				\
315786fffaSCornelia Huck 	TP_printk("%02d[%016lx-%016lx]: " p_str, __entry->id,		\
325786fffaSCornelia Huck 		  __entry->pswmask, __entry->pswaddr, p_args)
335786fffaSCornelia Huck 
34693ffc08SDominik Dingel TRACE_EVENT(kvm_s390_skey_related_inst,
35693ffc08SDominik Dingel 	    TP_PROTO(VCPU_PROTO_COMMON),
36693ffc08SDominik Dingel 	    TP_ARGS(VCPU_ARGS_COMMON),
37693ffc08SDominik Dingel 
38693ffc08SDominik Dingel 	    TP_STRUCT__entry(
39693ffc08SDominik Dingel 		    VCPU_FIELD_COMMON
40693ffc08SDominik Dingel 		    ),
41693ffc08SDominik Dingel 
42693ffc08SDominik Dingel 	    TP_fast_assign(
43693ffc08SDominik Dingel 		    VCPU_ASSIGN_COMMON
44693ffc08SDominik Dingel 		    ),
4511ddcd41SDavid Hildenbrand 	    VCPU_TP_PRINTK("%s", "storage key related instruction")
46693ffc08SDominik Dingel 	);
47693ffc08SDominik Dingel 
483c038e6bSDominik Dingel TRACE_EVENT(kvm_s390_major_guest_pfault,
493c038e6bSDominik Dingel 	    TP_PROTO(VCPU_PROTO_COMMON),
503c038e6bSDominik Dingel 	    TP_ARGS(VCPU_ARGS_COMMON),
513c038e6bSDominik Dingel 
523c038e6bSDominik Dingel 	    TP_STRUCT__entry(
533c038e6bSDominik Dingel 		    VCPU_FIELD_COMMON
543c038e6bSDominik Dingel 		    ),
553c038e6bSDominik Dingel 
563c038e6bSDominik Dingel 	    TP_fast_assign(
573c038e6bSDominik Dingel 		    VCPU_ASSIGN_COMMON
583c038e6bSDominik Dingel 		    ),
593c038e6bSDominik Dingel 	    VCPU_TP_PRINTK("%s", "major fault, maybe applicable for pfault")
603c038e6bSDominik Dingel 	);
613c038e6bSDominik Dingel 
623c038e6bSDominik Dingel TRACE_EVENT(kvm_s390_pfault_init,
633c038e6bSDominik Dingel 	    TP_PROTO(VCPU_PROTO_COMMON, long pfault_token),
643c038e6bSDominik Dingel 	    TP_ARGS(VCPU_ARGS_COMMON, pfault_token),
653c038e6bSDominik Dingel 
663c038e6bSDominik Dingel 	    TP_STRUCT__entry(
673c038e6bSDominik Dingel 		    VCPU_FIELD_COMMON
683c038e6bSDominik Dingel 		    __field(long, pfault_token)
693c038e6bSDominik Dingel 		    ),
703c038e6bSDominik Dingel 
713c038e6bSDominik Dingel 	    TP_fast_assign(
723c038e6bSDominik Dingel 		    VCPU_ASSIGN_COMMON
733c038e6bSDominik Dingel 		    __entry->pfault_token = pfault_token;
743c038e6bSDominik Dingel 		    ),
753c038e6bSDominik Dingel 	    VCPU_TP_PRINTK("init pfault token %ld", __entry->pfault_token)
763c038e6bSDominik Dingel 	);
773c038e6bSDominik Dingel 
783c038e6bSDominik Dingel TRACE_EVENT(kvm_s390_pfault_done,
793c038e6bSDominik Dingel 	    TP_PROTO(VCPU_PROTO_COMMON, long pfault_token),
803c038e6bSDominik Dingel 	    TP_ARGS(VCPU_ARGS_COMMON, pfault_token),
813c038e6bSDominik Dingel 
823c038e6bSDominik Dingel 	    TP_STRUCT__entry(
833c038e6bSDominik Dingel 		    VCPU_FIELD_COMMON
843c038e6bSDominik Dingel 		    __field(long, pfault_token)
853c038e6bSDominik Dingel 		    ),
863c038e6bSDominik Dingel 
873c038e6bSDominik Dingel 	    TP_fast_assign(
883c038e6bSDominik Dingel 		    VCPU_ASSIGN_COMMON
893c038e6bSDominik Dingel 		    __entry->pfault_token = pfault_token;
903c038e6bSDominik Dingel 		    ),
913c038e6bSDominik Dingel 	    VCPU_TP_PRINTK("done pfault token %ld", __entry->pfault_token)
923c038e6bSDominik Dingel 	);
933c038e6bSDominik Dingel 
945786fffaSCornelia Huck /*
955786fffaSCornelia Huck  * Tracepoints for SIE entry and exit.
965786fffaSCornelia Huck  */
975786fffaSCornelia Huck TRACE_EVENT(kvm_s390_sie_enter,
985786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON, int cpuflags),
995786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON, cpuflags),
1005786fffaSCornelia Huck 
1015786fffaSCornelia Huck 	    TP_STRUCT__entry(
1025786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
1035786fffaSCornelia Huck 		    __field(int, cpuflags)
1045786fffaSCornelia Huck 		    ),
1055786fffaSCornelia Huck 
1065786fffaSCornelia Huck 	    TP_fast_assign(
1075786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
1085786fffaSCornelia Huck 		    __entry->cpuflags = cpuflags;
1095786fffaSCornelia Huck 		    ),
1105786fffaSCornelia Huck 
1115786fffaSCornelia Huck 	    VCPU_TP_PRINTK("entering sie flags %x", __entry->cpuflags)
1125786fffaSCornelia Huck 	);
1135786fffaSCornelia Huck 
1145786fffaSCornelia Huck TRACE_EVENT(kvm_s390_sie_fault,
1155786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON),
1165786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON),
1175786fffaSCornelia Huck 
1185786fffaSCornelia Huck 	    TP_STRUCT__entry(
1195786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
1205786fffaSCornelia Huck 		    ),
1215786fffaSCornelia Huck 
1225786fffaSCornelia Huck 	    TP_fast_assign(
1235786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
1245786fffaSCornelia Huck 		    ),
1255786fffaSCornelia Huck 
1265786fffaSCornelia Huck 	    VCPU_TP_PRINTK("%s", "fault in sie instruction")
1275786fffaSCornelia Huck 	);
1285786fffaSCornelia Huck 
1295786fffaSCornelia Huck TRACE_EVENT(kvm_s390_sie_exit,
1305786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON, u8 icptcode),
1315786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON, icptcode),
1325786fffaSCornelia Huck 
1335786fffaSCornelia Huck 	    TP_STRUCT__entry(
1345786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
1355786fffaSCornelia Huck 		    __field(u8, icptcode)
1365786fffaSCornelia Huck 		    ),
1375786fffaSCornelia Huck 
1385786fffaSCornelia Huck 	    TP_fast_assign(
1395786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
1405786fffaSCornelia Huck 		    __entry->icptcode = icptcode;
1415786fffaSCornelia Huck 		    ),
1425786fffaSCornelia Huck 
1435786fffaSCornelia Huck 	    VCPU_TP_PRINTK("exit sie icptcode %d (%s)", __entry->icptcode,
1445786fffaSCornelia Huck 			   __print_symbolic(__entry->icptcode,
1455786fffaSCornelia Huck 					    sie_intercept_code))
1465786fffaSCornelia Huck 	);
1475786fffaSCornelia Huck 
1485786fffaSCornelia Huck /*
1495786fffaSCornelia Huck  * Trace point for intercepted instructions.
1505786fffaSCornelia Huck  */
1515786fffaSCornelia Huck TRACE_EVENT(kvm_s390_intercept_instruction,
1525786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON, __u16 ipa, __u32 ipb),
1535786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON, ipa, ipb),
1545786fffaSCornelia Huck 
1555786fffaSCornelia Huck 	    TP_STRUCT__entry(
1565786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
1575786fffaSCornelia Huck 		    __field(__u64, instruction)
1585786fffaSCornelia Huck 		    ),
1595786fffaSCornelia Huck 
1605786fffaSCornelia Huck 	    TP_fast_assign(
1615786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
1625786fffaSCornelia Huck 		    __entry->instruction = ((__u64)ipa << 48) |
1635786fffaSCornelia Huck 		    ((__u64)ipb << 16);
1645786fffaSCornelia Huck 		    ),
1655786fffaSCornelia Huck 
1665786fffaSCornelia Huck 	    VCPU_TP_PRINTK("intercepted instruction %016llx (%s)",
1675786fffaSCornelia Huck 			   __entry->instruction,
168d26b8655SAlexander Yarygin 			   __print_symbolic(icpt_insn_decoder(__entry->instruction),
169d26b8655SAlexander Yarygin 					    icpt_insn_codes))
1705786fffaSCornelia Huck 	);
1715786fffaSCornelia Huck 
1725786fffaSCornelia Huck /*
1735786fffaSCornelia Huck  * Trace point for intercepted program interruptions.
1745786fffaSCornelia Huck  */
1755786fffaSCornelia Huck TRACE_EVENT(kvm_s390_intercept_prog,
1765786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON, __u16 code),
1775786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON, code),
1785786fffaSCornelia Huck 
1795786fffaSCornelia Huck 	    TP_STRUCT__entry(
1805786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
1815786fffaSCornelia Huck 		    __field(__u16, code)
1825786fffaSCornelia Huck 		    ),
1835786fffaSCornelia Huck 
1845786fffaSCornelia Huck 	    TP_fast_assign(
1855786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
1865786fffaSCornelia Huck 		    __entry->code = code;
1875786fffaSCornelia Huck 		    ),
1885786fffaSCornelia Huck 
189c1778e51SAlexander Yarygin 	    VCPU_TP_PRINTK("intercepted program interruption %04x (%s)",
190c1778e51SAlexander Yarygin 			   __entry->code,
191c1778e51SAlexander Yarygin 			   __print_symbolic(__entry->code,
192c1778e51SAlexander Yarygin 					    icpt_prog_codes))
1935786fffaSCornelia Huck 	);
1945786fffaSCornelia Huck 
1955786fffaSCornelia Huck /*
1965786fffaSCornelia Huck  * Trace point for validity intercepts.
1975786fffaSCornelia Huck  */
1985786fffaSCornelia Huck TRACE_EVENT(kvm_s390_intercept_validity,
1995786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON, __u16 viwhy),
2005786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON, viwhy),
2015786fffaSCornelia Huck 
2025786fffaSCornelia Huck 	    TP_STRUCT__entry(
2035786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
2045786fffaSCornelia Huck 		    __field(__u16, viwhy)
2055786fffaSCornelia Huck 		    ),
2065786fffaSCornelia Huck 
2075786fffaSCornelia Huck 	    TP_fast_assign(
2085786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
2095786fffaSCornelia Huck 		    __entry->viwhy = viwhy;
2105786fffaSCornelia Huck 		    ),
2115786fffaSCornelia Huck 
2125786fffaSCornelia Huck 	    VCPU_TP_PRINTK("got validity intercept %04x", __entry->viwhy)
2135786fffaSCornelia Huck 	);
2145786fffaSCornelia Huck 
2155786fffaSCornelia Huck /*
2165786fffaSCornelia Huck  * Trace points for instructions that are of special interest.
2175786fffaSCornelia Huck  */
2185786fffaSCornelia Huck 
2195786fffaSCornelia Huck TRACE_EVENT(kvm_s390_handle_sigp,
2205786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON, __u8 order_code, __u16 cpu_addr, \
2215786fffaSCornelia Huck 		     __u32 parameter),
2225786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON, order_code, cpu_addr, parameter),
2235786fffaSCornelia Huck 
2245786fffaSCornelia Huck 	    TP_STRUCT__entry(
2255786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
2265786fffaSCornelia Huck 		    __field(__u8, order_code)
2275786fffaSCornelia Huck 		    __field(__u16, cpu_addr)
2285786fffaSCornelia Huck 		    __field(__u32, parameter)
2295786fffaSCornelia Huck 		    ),
2305786fffaSCornelia Huck 
2315786fffaSCornelia Huck 	    TP_fast_assign(
2325786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
2335786fffaSCornelia Huck 		    __entry->order_code = order_code;
2345786fffaSCornelia Huck 		    __entry->cpu_addr = cpu_addr;
2355786fffaSCornelia Huck 		    __entry->parameter = parameter;
2365786fffaSCornelia Huck 		    ),
2375786fffaSCornelia Huck 
2385786fffaSCornelia Huck 	    VCPU_TP_PRINTK("handle sigp order %02x (%s), cpu address %04x, " \
2395786fffaSCornelia Huck 			   "parameter %08x", __entry->order_code,
2405786fffaSCornelia Huck 			   __print_symbolic(__entry->order_code,
2415786fffaSCornelia Huck 					    sigp_order_codes),
2425786fffaSCornelia Huck 			   __entry->cpu_addr, __entry->parameter)
2435786fffaSCornelia Huck 	);
2445786fffaSCornelia Huck 
2454953919fSDavid Hildenbrand TRACE_EVENT(kvm_s390_handle_sigp_pei,
2464953919fSDavid Hildenbrand 	    TP_PROTO(VCPU_PROTO_COMMON, __u8 order_code, __u16 cpu_addr),
2474953919fSDavid Hildenbrand 	    TP_ARGS(VCPU_ARGS_COMMON, order_code, cpu_addr),
2484953919fSDavid Hildenbrand 
2494953919fSDavid Hildenbrand 	    TP_STRUCT__entry(
2504953919fSDavid Hildenbrand 		    VCPU_FIELD_COMMON
2514953919fSDavid Hildenbrand 		    __field(__u8, order_code)
2524953919fSDavid Hildenbrand 		    __field(__u16, cpu_addr)
2534953919fSDavid Hildenbrand 		    ),
2544953919fSDavid Hildenbrand 
2554953919fSDavid Hildenbrand 	    TP_fast_assign(
2564953919fSDavid Hildenbrand 		    VCPU_ASSIGN_COMMON
2574953919fSDavid Hildenbrand 		    __entry->order_code = order_code;
2584953919fSDavid Hildenbrand 		    __entry->cpu_addr = cpu_addr;
2594953919fSDavid Hildenbrand 		    ),
2604953919fSDavid Hildenbrand 
2614953919fSDavid Hildenbrand 	    VCPU_TP_PRINTK("handle sigp pei order %02x (%s), cpu address %04x",
2624953919fSDavid Hildenbrand 			   __entry->order_code,
2634953919fSDavid Hildenbrand 			   __print_symbolic(__entry->order_code,
2644953919fSDavid Hildenbrand 					    sigp_order_codes),
2654953919fSDavid Hildenbrand 			   __entry->cpu_addr)
2664953919fSDavid Hildenbrand 	);
2674953919fSDavid Hildenbrand 
2685786fffaSCornelia Huck TRACE_EVENT(kvm_s390_handle_diag,
2695786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON, __u16 code),
2705786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON, code),
2715786fffaSCornelia Huck 
2725786fffaSCornelia Huck 	    TP_STRUCT__entry(
2735786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
2745786fffaSCornelia Huck 		    __field(__u16, code)
2755786fffaSCornelia Huck 		    ),
2765786fffaSCornelia Huck 
2775786fffaSCornelia Huck 	    TP_fast_assign(
2785786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
2795786fffaSCornelia Huck 		    __entry->code = code;
2805786fffaSCornelia Huck 		    ),
2815786fffaSCornelia Huck 
2825786fffaSCornelia Huck 	    VCPU_TP_PRINTK("handle diagnose call %04x (%s)", __entry->code,
2835786fffaSCornelia Huck 			   __print_symbolic(__entry->code, diagnose_codes))
2845786fffaSCornelia Huck 	);
2855786fffaSCornelia Huck 
2865786fffaSCornelia Huck TRACE_EVENT(kvm_s390_handle_lctl,
2875786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON, int g, int reg1, int reg3, u64 addr),
2885786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON, g, reg1, reg3, addr),
2895786fffaSCornelia Huck 
2905786fffaSCornelia Huck 	    TP_STRUCT__entry(
2915786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
2925786fffaSCornelia Huck 		    __field(int, g)
2935786fffaSCornelia Huck 		    __field(int, reg1)
2945786fffaSCornelia Huck 		    __field(int, reg3)
2955786fffaSCornelia Huck 		    __field(u64, addr)
2965786fffaSCornelia Huck 		    ),
2975786fffaSCornelia Huck 
2985786fffaSCornelia Huck 	    TP_fast_assign(
2995786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
3005786fffaSCornelia Huck 		    __entry->g = g;
3015786fffaSCornelia Huck 		    __entry->reg1 = reg1;
3025786fffaSCornelia Huck 		    __entry->reg3 = reg3;
3035786fffaSCornelia Huck 		    __entry->addr = addr;
3045786fffaSCornelia Huck 		    ),
3055786fffaSCornelia Huck 
3065786fffaSCornelia Huck 	    VCPU_TP_PRINTK("%s: loading cr %x-%x from %016llx",
3075786fffaSCornelia Huck 			   __entry->g ? "lctlg" : "lctl",
3085786fffaSCornelia Huck 			   __entry->reg1, __entry->reg3, __entry->addr)
3095786fffaSCornelia Huck 	);
3105786fffaSCornelia Huck 
311aba07508SDavid Hildenbrand TRACE_EVENT(kvm_s390_handle_stctl,
312aba07508SDavid Hildenbrand 	    TP_PROTO(VCPU_PROTO_COMMON, int g, int reg1, int reg3, u64 addr),
313aba07508SDavid Hildenbrand 	    TP_ARGS(VCPU_ARGS_COMMON, g, reg1, reg3, addr),
314aba07508SDavid Hildenbrand 
315aba07508SDavid Hildenbrand 	    TP_STRUCT__entry(
316aba07508SDavid Hildenbrand 		    VCPU_FIELD_COMMON
317aba07508SDavid Hildenbrand 		    __field(int, g)
318aba07508SDavid Hildenbrand 		    __field(int, reg1)
319aba07508SDavid Hildenbrand 		    __field(int, reg3)
320aba07508SDavid Hildenbrand 		    __field(u64, addr)
321aba07508SDavid Hildenbrand 		    ),
322aba07508SDavid Hildenbrand 
323aba07508SDavid Hildenbrand 	    TP_fast_assign(
324aba07508SDavid Hildenbrand 		    VCPU_ASSIGN_COMMON
325aba07508SDavid Hildenbrand 		    __entry->g = g;
326aba07508SDavid Hildenbrand 		    __entry->reg1 = reg1;
327aba07508SDavid Hildenbrand 		    __entry->reg3 = reg3;
328aba07508SDavid Hildenbrand 		    __entry->addr = addr;
329aba07508SDavid Hildenbrand 		    ),
330aba07508SDavid Hildenbrand 
331aba07508SDavid Hildenbrand 	    VCPU_TP_PRINTK("%s: storing cr %x-%x to %016llx",
332aba07508SDavid Hildenbrand 			   __entry->g ? "stctg" : "stctl",
333aba07508SDavid Hildenbrand 			   __entry->reg1, __entry->reg3, __entry->addr)
334aba07508SDavid Hildenbrand 	);
335aba07508SDavid Hildenbrand 
3365786fffaSCornelia Huck TRACE_EVENT(kvm_s390_handle_prefix,
3375786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON, int set, u32 address),
3385786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON, set, address),
3395786fffaSCornelia Huck 
3405786fffaSCornelia Huck 	    TP_STRUCT__entry(
3415786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
3425786fffaSCornelia Huck 		    __field(int, set)
3435786fffaSCornelia Huck 		    __field(u32, address)
3445786fffaSCornelia Huck 		    ),
3455786fffaSCornelia Huck 
3465786fffaSCornelia Huck 	    TP_fast_assign(
3475786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
3485786fffaSCornelia Huck 		    __entry->set = set;
3495786fffaSCornelia Huck 		    __entry->address = address;
3505786fffaSCornelia Huck 		    ),
3515786fffaSCornelia Huck 
3525786fffaSCornelia Huck 	    VCPU_TP_PRINTK("%s prefix to %08x",
3535786fffaSCornelia Huck 			   __entry->set ? "setting" : "storing",
3545786fffaSCornelia Huck 			   __entry->address)
3555786fffaSCornelia Huck 	);
3565786fffaSCornelia Huck 
3575786fffaSCornelia Huck TRACE_EVENT(kvm_s390_handle_stap,
3585786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON, u64 address),
3595786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON, address),
3605786fffaSCornelia Huck 
3615786fffaSCornelia Huck 	    TP_STRUCT__entry(
3625786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
3635786fffaSCornelia Huck 		    __field(u64, address)
3645786fffaSCornelia Huck 		    ),
3655786fffaSCornelia Huck 
3665786fffaSCornelia Huck 	    TP_fast_assign(
3675786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
3685786fffaSCornelia Huck 		    __entry->address = address;
3695786fffaSCornelia Huck 		    ),
3705786fffaSCornelia Huck 
3715786fffaSCornelia Huck 	    VCPU_TP_PRINTK("storing cpu address to %016llx",
3725786fffaSCornelia Huck 			   __entry->address)
3735786fffaSCornelia Huck 	);
3745786fffaSCornelia Huck 
3755786fffaSCornelia Huck TRACE_EVENT(kvm_s390_handle_stfl,
3765786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON, unsigned int facility_list),
3775786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON, facility_list),
3785786fffaSCornelia Huck 
3795786fffaSCornelia Huck 	    TP_STRUCT__entry(
3805786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
3815786fffaSCornelia Huck 		    __field(unsigned int, facility_list)
3825786fffaSCornelia Huck 		    ),
3835786fffaSCornelia Huck 
3845786fffaSCornelia Huck 	    TP_fast_assign(
3855786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
3865786fffaSCornelia Huck 		    __entry->facility_list = facility_list;
3875786fffaSCornelia Huck 		    ),
3885786fffaSCornelia Huck 
3895786fffaSCornelia Huck 	    VCPU_TP_PRINTK("store facility list value %08x",
3905786fffaSCornelia Huck 			   __entry->facility_list)
3915786fffaSCornelia Huck 	);
3925786fffaSCornelia Huck 
3935786fffaSCornelia Huck TRACE_EVENT(kvm_s390_handle_stsi,
3945786fffaSCornelia Huck 	    TP_PROTO(VCPU_PROTO_COMMON, int fc, int sel1, int sel2, u64 addr),
3955786fffaSCornelia Huck 	    TP_ARGS(VCPU_ARGS_COMMON, fc, sel1, sel2, addr),
3965786fffaSCornelia Huck 
3975786fffaSCornelia Huck 	    TP_STRUCT__entry(
3985786fffaSCornelia Huck 		    VCPU_FIELD_COMMON
3995786fffaSCornelia Huck 		    __field(int, fc)
4005786fffaSCornelia Huck 		    __field(int, sel1)
4015786fffaSCornelia Huck 		    __field(int, sel2)
4025786fffaSCornelia Huck 		    __field(u64, addr)
4035786fffaSCornelia Huck 		    ),
4045786fffaSCornelia Huck 
4055786fffaSCornelia Huck 	    TP_fast_assign(
4065786fffaSCornelia Huck 		    VCPU_ASSIGN_COMMON
4075786fffaSCornelia Huck 		    __entry->fc = fc;
4085786fffaSCornelia Huck 		    __entry->sel1 = sel1;
4095786fffaSCornelia Huck 		    __entry->sel2 = sel2;
4105786fffaSCornelia Huck 		    __entry->addr = addr;
4115786fffaSCornelia Huck 		    ),
4125786fffaSCornelia Huck 
4135786fffaSCornelia Huck 	    VCPU_TP_PRINTK("STSI %d.%d.%d information stored to %016llx",
4145786fffaSCornelia Huck 			   __entry->fc, __entry->sel1, __entry->sel2,
4155786fffaSCornelia Huck 			   __entry->addr)
4165786fffaSCornelia Huck 	);
4175786fffaSCornelia Huck 
418a011eeb2SJanosch Frank TRACE_EVENT(kvm_s390_handle_operexc,
419a011eeb2SJanosch Frank 	    TP_PROTO(VCPU_PROTO_COMMON, __u16 ipa, __u32 ipb),
420a011eeb2SJanosch Frank 	    TP_ARGS(VCPU_ARGS_COMMON, ipa, ipb),
421a011eeb2SJanosch Frank 
422a011eeb2SJanosch Frank 	    TP_STRUCT__entry(
423a011eeb2SJanosch Frank 		    VCPU_FIELD_COMMON
424a011eeb2SJanosch Frank 		    __field(__u64, instruction)
425a011eeb2SJanosch Frank 		    ),
426a011eeb2SJanosch Frank 
427a011eeb2SJanosch Frank 	    TP_fast_assign(
428a011eeb2SJanosch Frank 		    VCPU_ASSIGN_COMMON
429a011eeb2SJanosch Frank 		    __entry->instruction = ((__u64)ipa << 48) |
430a011eeb2SJanosch Frank 		    ((__u64)ipb << 16);
431a011eeb2SJanosch Frank 		    ),
432a011eeb2SJanosch Frank 
433a011eeb2SJanosch Frank 	    VCPU_TP_PRINTK("operation exception on instruction %016llx (%s)",
434a011eeb2SJanosch Frank 			   __entry->instruction,
435a011eeb2SJanosch Frank 			   __print_symbolic(icpt_insn_decoder(__entry->instruction),
436a011eeb2SJanosch Frank 					    icpt_insn_codes))
437a011eeb2SJanosch Frank 	);
438a011eeb2SJanosch Frank 
43995ca2cb5SJanosch Frank TRACE_EVENT(kvm_s390_handle_sthyi,
44095ca2cb5SJanosch Frank 	    TP_PROTO(VCPU_PROTO_COMMON, u64 code, u64 addr),
44195ca2cb5SJanosch Frank 	    TP_ARGS(VCPU_ARGS_COMMON, code, addr),
44295ca2cb5SJanosch Frank 
44395ca2cb5SJanosch Frank 	    TP_STRUCT__entry(
44495ca2cb5SJanosch Frank 		    VCPU_FIELD_COMMON
44595ca2cb5SJanosch Frank 		    __field(u64, code)
44695ca2cb5SJanosch Frank 		    __field(u64, addr)
44795ca2cb5SJanosch Frank 		    ),
44895ca2cb5SJanosch Frank 
44995ca2cb5SJanosch Frank 	    TP_fast_assign(
45095ca2cb5SJanosch Frank 		    VCPU_ASSIGN_COMMON
45195ca2cb5SJanosch Frank 		    __entry->code = code;
45295ca2cb5SJanosch Frank 		    __entry->addr = addr;
45395ca2cb5SJanosch Frank 		    ),
45495ca2cb5SJanosch Frank 
45595ca2cb5SJanosch Frank 	    VCPU_TP_PRINTK("STHYI fc: %llu addr: %016llx",
45695ca2cb5SJanosch Frank 			   __entry->code, __entry->addr)
45795ca2cb5SJanosch Frank 	);
45895ca2cb5SJanosch Frank 
4595786fffaSCornelia Huck #endif /* _TRACE_KVM_H */
4605786fffaSCornelia Huck 
4615786fffaSCornelia Huck /* This part must be outside protection */
4625786fffaSCornelia Huck #include <trace/define_trace.h>
463