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