xref: /kernel/linux/linux-5.10/arch/s390/kvm/trace.h (revision 8c2ecf20)
18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
38c2ecf20Sopenharmony_ci#define _TRACE_KVM_H
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <linux/tracepoint.h>
68c2ecf20Sopenharmony_ci#include <asm/sie.h>
78c2ecf20Sopenharmony_ci#include <asm/debug.h>
88c2ecf20Sopenharmony_ci#include <asm/dis.h>
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#undef TRACE_SYSTEM
118c2ecf20Sopenharmony_ci#define TRACE_SYSTEM kvm
128c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_PATH .
138c2ecf20Sopenharmony_ci#undef TRACE_INCLUDE_FILE
148c2ecf20Sopenharmony_ci#define TRACE_INCLUDE_FILE trace
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci/*
178c2ecf20Sopenharmony_ci * Helpers for vcpu-specific tracepoints containing the same information
188c2ecf20Sopenharmony_ci * as s390dbf VCPU_EVENTs.
198c2ecf20Sopenharmony_ci */
208c2ecf20Sopenharmony_ci#define VCPU_PROTO_COMMON struct kvm_vcpu *vcpu
218c2ecf20Sopenharmony_ci#define VCPU_ARGS_COMMON vcpu
228c2ecf20Sopenharmony_ci#define VCPU_FIELD_COMMON __field(int, id)			\
238c2ecf20Sopenharmony_ci	__field(unsigned long, pswmask)				\
248c2ecf20Sopenharmony_ci	__field(unsigned long, pswaddr)
258c2ecf20Sopenharmony_ci#define VCPU_ASSIGN_COMMON do {						\
268c2ecf20Sopenharmony_ci	__entry->id = vcpu->vcpu_id;					\
278c2ecf20Sopenharmony_ci	__entry->pswmask = vcpu->arch.sie_block->gpsw.mask;		\
288c2ecf20Sopenharmony_ci	__entry->pswaddr = vcpu->arch.sie_block->gpsw.addr;		\
298c2ecf20Sopenharmony_ci	} while (0);
308c2ecf20Sopenharmony_ci#define VCPU_TP_PRINTK(p_str, p_args...)				\
318c2ecf20Sopenharmony_ci	TP_printk("%02d[%016lx-%016lx]: " p_str, __entry->id,		\
328c2ecf20Sopenharmony_ci		  __entry->pswmask, __entry->pswaddr, p_args)
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_skey_related_inst,
358c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON),
368c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON),
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
398c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
408c2ecf20Sopenharmony_ci		    ),
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci	    TP_fast_assign(
438c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
448c2ecf20Sopenharmony_ci		    ),
458c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("%s", "storage key related instruction")
468c2ecf20Sopenharmony_ci	);
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_major_guest_pfault,
498c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON),
508c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON),
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
538c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
548c2ecf20Sopenharmony_ci		    ),
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci	    TP_fast_assign(
578c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
588c2ecf20Sopenharmony_ci		    ),
598c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("%s", "major fault, maybe applicable for pfault")
608c2ecf20Sopenharmony_ci	);
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_pfault_init,
638c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, long pfault_token),
648c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, pfault_token),
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
678c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
688c2ecf20Sopenharmony_ci		    __field(long, pfault_token)
698c2ecf20Sopenharmony_ci		    ),
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_ci	    TP_fast_assign(
728c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
738c2ecf20Sopenharmony_ci		    __entry->pfault_token = pfault_token;
748c2ecf20Sopenharmony_ci		    ),
758c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("init pfault token %ld", __entry->pfault_token)
768c2ecf20Sopenharmony_ci	);
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_pfault_done,
798c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, long pfault_token),
808c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, pfault_token),
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
838c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
848c2ecf20Sopenharmony_ci		    __field(long, pfault_token)
858c2ecf20Sopenharmony_ci		    ),
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ci	    TP_fast_assign(
888c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
898c2ecf20Sopenharmony_ci		    __entry->pfault_token = pfault_token;
908c2ecf20Sopenharmony_ci		    ),
918c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("done pfault token %ld", __entry->pfault_token)
928c2ecf20Sopenharmony_ci	);
938c2ecf20Sopenharmony_ci
948c2ecf20Sopenharmony_ci/*
958c2ecf20Sopenharmony_ci * Tracepoints for SIE entry and exit.
968c2ecf20Sopenharmony_ci */
978c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_sie_enter,
988c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, int cpuflags),
998c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, cpuflags),
1008c2ecf20Sopenharmony_ci
1018c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
1028c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
1038c2ecf20Sopenharmony_ci		    __field(int, cpuflags)
1048c2ecf20Sopenharmony_ci		    ),
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ci	    TP_fast_assign(
1078c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
1088c2ecf20Sopenharmony_ci		    __entry->cpuflags = cpuflags;
1098c2ecf20Sopenharmony_ci		    ),
1108c2ecf20Sopenharmony_ci
1118c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("entering sie flags %x", __entry->cpuflags)
1128c2ecf20Sopenharmony_ci	);
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_sie_fault,
1158c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON),
1168c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON),
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
1198c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
1208c2ecf20Sopenharmony_ci		    ),
1218c2ecf20Sopenharmony_ci
1228c2ecf20Sopenharmony_ci	    TP_fast_assign(
1238c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
1248c2ecf20Sopenharmony_ci		    ),
1258c2ecf20Sopenharmony_ci
1268c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("%s", "fault in sie instruction")
1278c2ecf20Sopenharmony_ci	);
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_sie_exit,
1308c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, u8 icptcode),
1318c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, icptcode),
1328c2ecf20Sopenharmony_ci
1338c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
1348c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
1358c2ecf20Sopenharmony_ci		    __field(u8, icptcode)
1368c2ecf20Sopenharmony_ci		    ),
1378c2ecf20Sopenharmony_ci
1388c2ecf20Sopenharmony_ci	    TP_fast_assign(
1398c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
1408c2ecf20Sopenharmony_ci		    __entry->icptcode = icptcode;
1418c2ecf20Sopenharmony_ci		    ),
1428c2ecf20Sopenharmony_ci
1438c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("exit sie icptcode %d (%s)", __entry->icptcode,
1448c2ecf20Sopenharmony_ci			   __print_symbolic(__entry->icptcode,
1458c2ecf20Sopenharmony_ci					    sie_intercept_code))
1468c2ecf20Sopenharmony_ci	);
1478c2ecf20Sopenharmony_ci
1488c2ecf20Sopenharmony_ci/*
1498c2ecf20Sopenharmony_ci * Trace point for intercepted instructions.
1508c2ecf20Sopenharmony_ci */
1518c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_intercept_instruction,
1528c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, __u16 ipa, __u32 ipb),
1538c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, ipa, ipb),
1548c2ecf20Sopenharmony_ci
1558c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
1568c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
1578c2ecf20Sopenharmony_ci		    __field(__u64, instruction)
1588c2ecf20Sopenharmony_ci		    ),
1598c2ecf20Sopenharmony_ci
1608c2ecf20Sopenharmony_ci	    TP_fast_assign(
1618c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
1628c2ecf20Sopenharmony_ci		    __entry->instruction = ((__u64)ipa << 48) |
1638c2ecf20Sopenharmony_ci		    ((__u64)ipb << 16);
1648c2ecf20Sopenharmony_ci		    ),
1658c2ecf20Sopenharmony_ci
1668c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("intercepted instruction %016llx (%s)",
1678c2ecf20Sopenharmony_ci			   __entry->instruction,
1688c2ecf20Sopenharmony_ci			   __print_symbolic(icpt_insn_decoder(__entry->instruction),
1698c2ecf20Sopenharmony_ci					    icpt_insn_codes))
1708c2ecf20Sopenharmony_ci	);
1718c2ecf20Sopenharmony_ci
1728c2ecf20Sopenharmony_ci/*
1738c2ecf20Sopenharmony_ci * Trace point for intercepted program interruptions.
1748c2ecf20Sopenharmony_ci */
1758c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_intercept_prog,
1768c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, __u16 code),
1778c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, code),
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
1808c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
1818c2ecf20Sopenharmony_ci		    __field(__u16, code)
1828c2ecf20Sopenharmony_ci		    ),
1838c2ecf20Sopenharmony_ci
1848c2ecf20Sopenharmony_ci	    TP_fast_assign(
1858c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
1868c2ecf20Sopenharmony_ci		    __entry->code = code;
1878c2ecf20Sopenharmony_ci		    ),
1888c2ecf20Sopenharmony_ci
1898c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("intercepted program interruption %04x (%s)",
1908c2ecf20Sopenharmony_ci			   __entry->code,
1918c2ecf20Sopenharmony_ci			   __print_symbolic(__entry->code,
1928c2ecf20Sopenharmony_ci					    icpt_prog_codes))
1938c2ecf20Sopenharmony_ci	);
1948c2ecf20Sopenharmony_ci
1958c2ecf20Sopenharmony_ci/*
1968c2ecf20Sopenharmony_ci * Trace point for validity intercepts.
1978c2ecf20Sopenharmony_ci */
1988c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_intercept_validity,
1998c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, __u16 viwhy),
2008c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, viwhy),
2018c2ecf20Sopenharmony_ci
2028c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
2038c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
2048c2ecf20Sopenharmony_ci		    __field(__u16, viwhy)
2058c2ecf20Sopenharmony_ci		    ),
2068c2ecf20Sopenharmony_ci
2078c2ecf20Sopenharmony_ci	    TP_fast_assign(
2088c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
2098c2ecf20Sopenharmony_ci		    __entry->viwhy = viwhy;
2108c2ecf20Sopenharmony_ci		    ),
2118c2ecf20Sopenharmony_ci
2128c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("got validity intercept %04x", __entry->viwhy)
2138c2ecf20Sopenharmony_ci	);
2148c2ecf20Sopenharmony_ci
2158c2ecf20Sopenharmony_ci/*
2168c2ecf20Sopenharmony_ci * Trace points for instructions that are of special interest.
2178c2ecf20Sopenharmony_ci */
2188c2ecf20Sopenharmony_ci
2198c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_handle_sigp,
2208c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, __u8 order_code, __u16 cpu_addr, \
2218c2ecf20Sopenharmony_ci		     __u32 parameter),
2228c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, order_code, cpu_addr, parameter),
2238c2ecf20Sopenharmony_ci
2248c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
2258c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
2268c2ecf20Sopenharmony_ci		    __field(__u8, order_code)
2278c2ecf20Sopenharmony_ci		    __field(__u16, cpu_addr)
2288c2ecf20Sopenharmony_ci		    __field(__u32, parameter)
2298c2ecf20Sopenharmony_ci		    ),
2308c2ecf20Sopenharmony_ci
2318c2ecf20Sopenharmony_ci	    TP_fast_assign(
2328c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
2338c2ecf20Sopenharmony_ci		    __entry->order_code = order_code;
2348c2ecf20Sopenharmony_ci		    __entry->cpu_addr = cpu_addr;
2358c2ecf20Sopenharmony_ci		    __entry->parameter = parameter;
2368c2ecf20Sopenharmony_ci		    ),
2378c2ecf20Sopenharmony_ci
2388c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("handle sigp order %02x (%s), cpu address %04x, " \
2398c2ecf20Sopenharmony_ci			   "parameter %08x", __entry->order_code,
2408c2ecf20Sopenharmony_ci			   __print_symbolic(__entry->order_code,
2418c2ecf20Sopenharmony_ci					    sigp_order_codes),
2428c2ecf20Sopenharmony_ci			   __entry->cpu_addr, __entry->parameter)
2438c2ecf20Sopenharmony_ci	);
2448c2ecf20Sopenharmony_ci
2458c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_handle_sigp_pei,
2468c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, __u8 order_code, __u16 cpu_addr),
2478c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, order_code, cpu_addr),
2488c2ecf20Sopenharmony_ci
2498c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
2508c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
2518c2ecf20Sopenharmony_ci		    __field(__u8, order_code)
2528c2ecf20Sopenharmony_ci		    __field(__u16, cpu_addr)
2538c2ecf20Sopenharmony_ci		    ),
2548c2ecf20Sopenharmony_ci
2558c2ecf20Sopenharmony_ci	    TP_fast_assign(
2568c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
2578c2ecf20Sopenharmony_ci		    __entry->order_code = order_code;
2588c2ecf20Sopenharmony_ci		    __entry->cpu_addr = cpu_addr;
2598c2ecf20Sopenharmony_ci		    ),
2608c2ecf20Sopenharmony_ci
2618c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("handle sigp pei order %02x (%s), cpu address %04x",
2628c2ecf20Sopenharmony_ci			   __entry->order_code,
2638c2ecf20Sopenharmony_ci			   __print_symbolic(__entry->order_code,
2648c2ecf20Sopenharmony_ci					    sigp_order_codes),
2658c2ecf20Sopenharmony_ci			   __entry->cpu_addr)
2668c2ecf20Sopenharmony_ci	);
2678c2ecf20Sopenharmony_ci
2688c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_handle_diag,
2698c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, __u16 code),
2708c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, code),
2718c2ecf20Sopenharmony_ci
2728c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
2738c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
2748c2ecf20Sopenharmony_ci		    __field(__u16, code)
2758c2ecf20Sopenharmony_ci		    ),
2768c2ecf20Sopenharmony_ci
2778c2ecf20Sopenharmony_ci	    TP_fast_assign(
2788c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
2798c2ecf20Sopenharmony_ci		    __entry->code = code;
2808c2ecf20Sopenharmony_ci		    ),
2818c2ecf20Sopenharmony_ci
2828c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("handle diagnose call %04x (%s)", __entry->code,
2838c2ecf20Sopenharmony_ci			   __print_symbolic(__entry->code, diagnose_codes))
2848c2ecf20Sopenharmony_ci	);
2858c2ecf20Sopenharmony_ci
2868c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_handle_lctl,
2878c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, int g, int reg1, int reg3, u64 addr),
2888c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, g, reg1, reg3, addr),
2898c2ecf20Sopenharmony_ci
2908c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
2918c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
2928c2ecf20Sopenharmony_ci		    __field(int, g)
2938c2ecf20Sopenharmony_ci		    __field(int, reg1)
2948c2ecf20Sopenharmony_ci		    __field(int, reg3)
2958c2ecf20Sopenharmony_ci		    __field(u64, addr)
2968c2ecf20Sopenharmony_ci		    ),
2978c2ecf20Sopenharmony_ci
2988c2ecf20Sopenharmony_ci	    TP_fast_assign(
2998c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
3008c2ecf20Sopenharmony_ci		    __entry->g = g;
3018c2ecf20Sopenharmony_ci		    __entry->reg1 = reg1;
3028c2ecf20Sopenharmony_ci		    __entry->reg3 = reg3;
3038c2ecf20Sopenharmony_ci		    __entry->addr = addr;
3048c2ecf20Sopenharmony_ci		    ),
3058c2ecf20Sopenharmony_ci
3068c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("%s: loading cr %x-%x from %016llx",
3078c2ecf20Sopenharmony_ci			   __entry->g ? "lctlg" : "lctl",
3088c2ecf20Sopenharmony_ci			   __entry->reg1, __entry->reg3, __entry->addr)
3098c2ecf20Sopenharmony_ci	);
3108c2ecf20Sopenharmony_ci
3118c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_handle_stctl,
3128c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, int g, int reg1, int reg3, u64 addr),
3138c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, g, reg1, reg3, addr),
3148c2ecf20Sopenharmony_ci
3158c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
3168c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
3178c2ecf20Sopenharmony_ci		    __field(int, g)
3188c2ecf20Sopenharmony_ci		    __field(int, reg1)
3198c2ecf20Sopenharmony_ci		    __field(int, reg3)
3208c2ecf20Sopenharmony_ci		    __field(u64, addr)
3218c2ecf20Sopenharmony_ci		    ),
3228c2ecf20Sopenharmony_ci
3238c2ecf20Sopenharmony_ci	    TP_fast_assign(
3248c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
3258c2ecf20Sopenharmony_ci		    __entry->g = g;
3268c2ecf20Sopenharmony_ci		    __entry->reg1 = reg1;
3278c2ecf20Sopenharmony_ci		    __entry->reg3 = reg3;
3288c2ecf20Sopenharmony_ci		    __entry->addr = addr;
3298c2ecf20Sopenharmony_ci		    ),
3308c2ecf20Sopenharmony_ci
3318c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("%s: storing cr %x-%x to %016llx",
3328c2ecf20Sopenharmony_ci			   __entry->g ? "stctg" : "stctl",
3338c2ecf20Sopenharmony_ci			   __entry->reg1, __entry->reg3, __entry->addr)
3348c2ecf20Sopenharmony_ci	);
3358c2ecf20Sopenharmony_ci
3368c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_handle_prefix,
3378c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, int set, u32 address),
3388c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, set, address),
3398c2ecf20Sopenharmony_ci
3408c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
3418c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
3428c2ecf20Sopenharmony_ci		    __field(int, set)
3438c2ecf20Sopenharmony_ci		    __field(u32, address)
3448c2ecf20Sopenharmony_ci		    ),
3458c2ecf20Sopenharmony_ci
3468c2ecf20Sopenharmony_ci	    TP_fast_assign(
3478c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
3488c2ecf20Sopenharmony_ci		    __entry->set = set;
3498c2ecf20Sopenharmony_ci		    __entry->address = address;
3508c2ecf20Sopenharmony_ci		    ),
3518c2ecf20Sopenharmony_ci
3528c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("%s prefix to %08x",
3538c2ecf20Sopenharmony_ci			   __entry->set ? "setting" : "storing",
3548c2ecf20Sopenharmony_ci			   __entry->address)
3558c2ecf20Sopenharmony_ci	);
3568c2ecf20Sopenharmony_ci
3578c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_handle_stap,
3588c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, u64 address),
3598c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, address),
3608c2ecf20Sopenharmony_ci
3618c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
3628c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
3638c2ecf20Sopenharmony_ci		    __field(u64, address)
3648c2ecf20Sopenharmony_ci		    ),
3658c2ecf20Sopenharmony_ci
3668c2ecf20Sopenharmony_ci	    TP_fast_assign(
3678c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
3688c2ecf20Sopenharmony_ci		    __entry->address = address;
3698c2ecf20Sopenharmony_ci		    ),
3708c2ecf20Sopenharmony_ci
3718c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("storing cpu address to %016llx",
3728c2ecf20Sopenharmony_ci			   __entry->address)
3738c2ecf20Sopenharmony_ci	);
3748c2ecf20Sopenharmony_ci
3758c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_handle_stfl,
3768c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, unsigned int facility_list),
3778c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, facility_list),
3788c2ecf20Sopenharmony_ci
3798c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
3808c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
3818c2ecf20Sopenharmony_ci		    __field(unsigned int, facility_list)
3828c2ecf20Sopenharmony_ci		    ),
3838c2ecf20Sopenharmony_ci
3848c2ecf20Sopenharmony_ci	    TP_fast_assign(
3858c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
3868c2ecf20Sopenharmony_ci		    __entry->facility_list = facility_list;
3878c2ecf20Sopenharmony_ci		    ),
3888c2ecf20Sopenharmony_ci
3898c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("store facility list value %08x",
3908c2ecf20Sopenharmony_ci			   __entry->facility_list)
3918c2ecf20Sopenharmony_ci	);
3928c2ecf20Sopenharmony_ci
3938c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_handle_stsi,
3948c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, int fc, int sel1, int sel2, u64 addr),
3958c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, fc, sel1, sel2, addr),
3968c2ecf20Sopenharmony_ci
3978c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
3988c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
3998c2ecf20Sopenharmony_ci		    __field(int, fc)
4008c2ecf20Sopenharmony_ci		    __field(int, sel1)
4018c2ecf20Sopenharmony_ci		    __field(int, sel2)
4028c2ecf20Sopenharmony_ci		    __field(u64, addr)
4038c2ecf20Sopenharmony_ci		    ),
4048c2ecf20Sopenharmony_ci
4058c2ecf20Sopenharmony_ci	    TP_fast_assign(
4068c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
4078c2ecf20Sopenharmony_ci		    __entry->fc = fc;
4088c2ecf20Sopenharmony_ci		    __entry->sel1 = sel1;
4098c2ecf20Sopenharmony_ci		    __entry->sel2 = sel2;
4108c2ecf20Sopenharmony_ci		    __entry->addr = addr;
4118c2ecf20Sopenharmony_ci		    ),
4128c2ecf20Sopenharmony_ci
4138c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("STSI %d.%d.%d information stored to %016llx",
4148c2ecf20Sopenharmony_ci			   __entry->fc, __entry->sel1, __entry->sel2,
4158c2ecf20Sopenharmony_ci			   __entry->addr)
4168c2ecf20Sopenharmony_ci	);
4178c2ecf20Sopenharmony_ci
4188c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_handle_operexc,
4198c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, __u16 ipa, __u32 ipb),
4208c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, ipa, ipb),
4218c2ecf20Sopenharmony_ci
4228c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
4238c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
4248c2ecf20Sopenharmony_ci		    __field(__u64, instruction)
4258c2ecf20Sopenharmony_ci		    ),
4268c2ecf20Sopenharmony_ci
4278c2ecf20Sopenharmony_ci	    TP_fast_assign(
4288c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
4298c2ecf20Sopenharmony_ci		    __entry->instruction = ((__u64)ipa << 48) |
4308c2ecf20Sopenharmony_ci		    ((__u64)ipb << 16);
4318c2ecf20Sopenharmony_ci		    ),
4328c2ecf20Sopenharmony_ci
4338c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("operation exception on instruction %016llx (%s)",
4348c2ecf20Sopenharmony_ci			   __entry->instruction,
4358c2ecf20Sopenharmony_ci			   __print_symbolic(icpt_insn_decoder(__entry->instruction),
4368c2ecf20Sopenharmony_ci					    icpt_insn_codes))
4378c2ecf20Sopenharmony_ci	);
4388c2ecf20Sopenharmony_ci
4398c2ecf20Sopenharmony_ciTRACE_EVENT(kvm_s390_handle_sthyi,
4408c2ecf20Sopenharmony_ci	    TP_PROTO(VCPU_PROTO_COMMON, u64 code, u64 addr),
4418c2ecf20Sopenharmony_ci	    TP_ARGS(VCPU_ARGS_COMMON, code, addr),
4428c2ecf20Sopenharmony_ci
4438c2ecf20Sopenharmony_ci	    TP_STRUCT__entry(
4448c2ecf20Sopenharmony_ci		    VCPU_FIELD_COMMON
4458c2ecf20Sopenharmony_ci		    __field(u64, code)
4468c2ecf20Sopenharmony_ci		    __field(u64, addr)
4478c2ecf20Sopenharmony_ci		    ),
4488c2ecf20Sopenharmony_ci
4498c2ecf20Sopenharmony_ci	    TP_fast_assign(
4508c2ecf20Sopenharmony_ci		    VCPU_ASSIGN_COMMON
4518c2ecf20Sopenharmony_ci		    __entry->code = code;
4528c2ecf20Sopenharmony_ci		    __entry->addr = addr;
4538c2ecf20Sopenharmony_ci		    ),
4548c2ecf20Sopenharmony_ci
4558c2ecf20Sopenharmony_ci	    VCPU_TP_PRINTK("STHYI fc: %llu addr: %016llx",
4568c2ecf20Sopenharmony_ci			   __entry->code, __entry->addr)
4578c2ecf20Sopenharmony_ci	);
4588c2ecf20Sopenharmony_ci
4598c2ecf20Sopenharmony_ci#endif /* _TRACE_KVM_H */
4608c2ecf20Sopenharmony_ci
4618c2ecf20Sopenharmony_ci/* This part must be outside protection */
4628c2ecf20Sopenharmony_ci#include <trace/define_trace.h>
463