1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ) 3*4882a593Smuzhiyun #define _TRACE_KVM_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/tracepoint.h> 6*4882a593Smuzhiyun #include <asm/sie.h> 7*4882a593Smuzhiyun #include <asm/debug.h> 8*4882a593Smuzhiyun #include <asm/dis.h> 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #undef TRACE_SYSTEM 11*4882a593Smuzhiyun #define TRACE_SYSTEM kvm 12*4882a593Smuzhiyun #define TRACE_INCLUDE_PATH . 13*4882a593Smuzhiyun #undef TRACE_INCLUDE_FILE 14*4882a593Smuzhiyun #define TRACE_INCLUDE_FILE trace 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* 17*4882a593Smuzhiyun * Helpers for vcpu-specific tracepoints containing the same information 18*4882a593Smuzhiyun * as s390dbf VCPU_EVENTs. 19*4882a593Smuzhiyun */ 20*4882a593Smuzhiyun #define VCPU_PROTO_COMMON struct kvm_vcpu *vcpu 21*4882a593Smuzhiyun #define VCPU_ARGS_COMMON vcpu 22*4882a593Smuzhiyun #define VCPU_FIELD_COMMON __field(int, id) \ 23*4882a593Smuzhiyun __field(unsigned long, pswmask) \ 24*4882a593Smuzhiyun __field(unsigned long, pswaddr) 25*4882a593Smuzhiyun #define VCPU_ASSIGN_COMMON do { \ 26*4882a593Smuzhiyun __entry->id = vcpu->vcpu_id; \ 27*4882a593Smuzhiyun __entry->pswmask = vcpu->arch.sie_block->gpsw.mask; \ 28*4882a593Smuzhiyun __entry->pswaddr = vcpu->arch.sie_block->gpsw.addr; \ 29*4882a593Smuzhiyun } while (0); 30*4882a593Smuzhiyun #define VCPU_TP_PRINTK(p_str, p_args...) \ 31*4882a593Smuzhiyun TP_printk("%02d[%016lx-%016lx]: " p_str, __entry->id, \ 32*4882a593Smuzhiyun __entry->pswmask, __entry->pswaddr, p_args) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_skey_related_inst, 35*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON), 36*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON), 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun TP_STRUCT__entry( 39*4882a593Smuzhiyun VCPU_FIELD_COMMON 40*4882a593Smuzhiyun ), 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun TP_fast_assign( 43*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 44*4882a593Smuzhiyun ), 45*4882a593Smuzhiyun VCPU_TP_PRINTK("%s", "storage key related instruction") 46*4882a593Smuzhiyun ); 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_major_guest_pfault, 49*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON), 50*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON), 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun TP_STRUCT__entry( 53*4882a593Smuzhiyun VCPU_FIELD_COMMON 54*4882a593Smuzhiyun ), 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun TP_fast_assign( 57*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 58*4882a593Smuzhiyun ), 59*4882a593Smuzhiyun VCPU_TP_PRINTK("%s", "major fault, maybe applicable for pfault") 60*4882a593Smuzhiyun ); 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_pfault_init, 63*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, long pfault_token), 64*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, pfault_token), 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun TP_STRUCT__entry( 67*4882a593Smuzhiyun VCPU_FIELD_COMMON 68*4882a593Smuzhiyun __field(long, pfault_token) 69*4882a593Smuzhiyun ), 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun TP_fast_assign( 72*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 73*4882a593Smuzhiyun __entry->pfault_token = pfault_token; 74*4882a593Smuzhiyun ), 75*4882a593Smuzhiyun VCPU_TP_PRINTK("init pfault token %ld", __entry->pfault_token) 76*4882a593Smuzhiyun ); 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_pfault_done, 79*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, long pfault_token), 80*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, pfault_token), 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun TP_STRUCT__entry( 83*4882a593Smuzhiyun VCPU_FIELD_COMMON 84*4882a593Smuzhiyun __field(long, pfault_token) 85*4882a593Smuzhiyun ), 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun TP_fast_assign( 88*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 89*4882a593Smuzhiyun __entry->pfault_token = pfault_token; 90*4882a593Smuzhiyun ), 91*4882a593Smuzhiyun VCPU_TP_PRINTK("done pfault token %ld", __entry->pfault_token) 92*4882a593Smuzhiyun ); 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun /* 95*4882a593Smuzhiyun * Tracepoints for SIE entry and exit. 96*4882a593Smuzhiyun */ 97*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_sie_enter, 98*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, int cpuflags), 99*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, cpuflags), 100*4882a593Smuzhiyun 101*4882a593Smuzhiyun TP_STRUCT__entry( 102*4882a593Smuzhiyun VCPU_FIELD_COMMON 103*4882a593Smuzhiyun __field(int, cpuflags) 104*4882a593Smuzhiyun ), 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun TP_fast_assign( 107*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 108*4882a593Smuzhiyun __entry->cpuflags = cpuflags; 109*4882a593Smuzhiyun ), 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun VCPU_TP_PRINTK("entering sie flags %x", __entry->cpuflags) 112*4882a593Smuzhiyun ); 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_sie_fault, 115*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON), 116*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON), 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun TP_STRUCT__entry( 119*4882a593Smuzhiyun VCPU_FIELD_COMMON 120*4882a593Smuzhiyun ), 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun TP_fast_assign( 123*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 124*4882a593Smuzhiyun ), 125*4882a593Smuzhiyun 126*4882a593Smuzhiyun VCPU_TP_PRINTK("%s", "fault in sie instruction") 127*4882a593Smuzhiyun ); 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_sie_exit, 130*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, u8 icptcode), 131*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, icptcode), 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun TP_STRUCT__entry( 134*4882a593Smuzhiyun VCPU_FIELD_COMMON 135*4882a593Smuzhiyun __field(u8, icptcode) 136*4882a593Smuzhiyun ), 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun TP_fast_assign( 139*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 140*4882a593Smuzhiyun __entry->icptcode = icptcode; 141*4882a593Smuzhiyun ), 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun VCPU_TP_PRINTK("exit sie icptcode %d (%s)", __entry->icptcode, 144*4882a593Smuzhiyun __print_symbolic(__entry->icptcode, 145*4882a593Smuzhiyun sie_intercept_code)) 146*4882a593Smuzhiyun ); 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun /* 149*4882a593Smuzhiyun * Trace point for intercepted instructions. 150*4882a593Smuzhiyun */ 151*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_intercept_instruction, 152*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, __u16 ipa, __u32 ipb), 153*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, ipa, ipb), 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun TP_STRUCT__entry( 156*4882a593Smuzhiyun VCPU_FIELD_COMMON 157*4882a593Smuzhiyun __field(__u64, instruction) 158*4882a593Smuzhiyun ), 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun TP_fast_assign( 161*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 162*4882a593Smuzhiyun __entry->instruction = ((__u64)ipa << 48) | 163*4882a593Smuzhiyun ((__u64)ipb << 16); 164*4882a593Smuzhiyun ), 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun VCPU_TP_PRINTK("intercepted instruction %016llx (%s)", 167*4882a593Smuzhiyun __entry->instruction, 168*4882a593Smuzhiyun __print_symbolic(icpt_insn_decoder(__entry->instruction), 169*4882a593Smuzhiyun icpt_insn_codes)) 170*4882a593Smuzhiyun ); 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun /* 173*4882a593Smuzhiyun * Trace point for intercepted program interruptions. 174*4882a593Smuzhiyun */ 175*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_intercept_prog, 176*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, __u16 code), 177*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, code), 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun TP_STRUCT__entry( 180*4882a593Smuzhiyun VCPU_FIELD_COMMON 181*4882a593Smuzhiyun __field(__u16, code) 182*4882a593Smuzhiyun ), 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun TP_fast_assign( 185*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 186*4882a593Smuzhiyun __entry->code = code; 187*4882a593Smuzhiyun ), 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun VCPU_TP_PRINTK("intercepted program interruption %04x (%s)", 190*4882a593Smuzhiyun __entry->code, 191*4882a593Smuzhiyun __print_symbolic(__entry->code, 192*4882a593Smuzhiyun icpt_prog_codes)) 193*4882a593Smuzhiyun ); 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun /* 196*4882a593Smuzhiyun * Trace point for validity intercepts. 197*4882a593Smuzhiyun */ 198*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_intercept_validity, 199*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, __u16 viwhy), 200*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, viwhy), 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun TP_STRUCT__entry( 203*4882a593Smuzhiyun VCPU_FIELD_COMMON 204*4882a593Smuzhiyun __field(__u16, viwhy) 205*4882a593Smuzhiyun ), 206*4882a593Smuzhiyun 207*4882a593Smuzhiyun TP_fast_assign( 208*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 209*4882a593Smuzhiyun __entry->viwhy = viwhy; 210*4882a593Smuzhiyun ), 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun VCPU_TP_PRINTK("got validity intercept %04x", __entry->viwhy) 213*4882a593Smuzhiyun ); 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun /* 216*4882a593Smuzhiyun * Trace points for instructions that are of special interest. 217*4882a593Smuzhiyun */ 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_sigp, 220*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, __u8 order_code, __u16 cpu_addr, \ 221*4882a593Smuzhiyun __u32 parameter), 222*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, order_code, cpu_addr, parameter), 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun TP_STRUCT__entry( 225*4882a593Smuzhiyun VCPU_FIELD_COMMON 226*4882a593Smuzhiyun __field(__u8, order_code) 227*4882a593Smuzhiyun __field(__u16, cpu_addr) 228*4882a593Smuzhiyun __field(__u32, parameter) 229*4882a593Smuzhiyun ), 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun TP_fast_assign( 232*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 233*4882a593Smuzhiyun __entry->order_code = order_code; 234*4882a593Smuzhiyun __entry->cpu_addr = cpu_addr; 235*4882a593Smuzhiyun __entry->parameter = parameter; 236*4882a593Smuzhiyun ), 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun VCPU_TP_PRINTK("handle sigp order %02x (%s), cpu address %04x, " \ 239*4882a593Smuzhiyun "parameter %08x", __entry->order_code, 240*4882a593Smuzhiyun __print_symbolic(__entry->order_code, 241*4882a593Smuzhiyun sigp_order_codes), 242*4882a593Smuzhiyun __entry->cpu_addr, __entry->parameter) 243*4882a593Smuzhiyun ); 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_sigp_pei, 246*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, __u8 order_code, __u16 cpu_addr), 247*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, order_code, cpu_addr), 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun TP_STRUCT__entry( 250*4882a593Smuzhiyun VCPU_FIELD_COMMON 251*4882a593Smuzhiyun __field(__u8, order_code) 252*4882a593Smuzhiyun __field(__u16, cpu_addr) 253*4882a593Smuzhiyun ), 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun TP_fast_assign( 256*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 257*4882a593Smuzhiyun __entry->order_code = order_code; 258*4882a593Smuzhiyun __entry->cpu_addr = cpu_addr; 259*4882a593Smuzhiyun ), 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun VCPU_TP_PRINTK("handle sigp pei order %02x (%s), cpu address %04x", 262*4882a593Smuzhiyun __entry->order_code, 263*4882a593Smuzhiyun __print_symbolic(__entry->order_code, 264*4882a593Smuzhiyun sigp_order_codes), 265*4882a593Smuzhiyun __entry->cpu_addr) 266*4882a593Smuzhiyun ); 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_diag, 269*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, __u16 code), 270*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, code), 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun TP_STRUCT__entry( 273*4882a593Smuzhiyun VCPU_FIELD_COMMON 274*4882a593Smuzhiyun __field(__u16, code) 275*4882a593Smuzhiyun ), 276*4882a593Smuzhiyun 277*4882a593Smuzhiyun TP_fast_assign( 278*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 279*4882a593Smuzhiyun __entry->code = code; 280*4882a593Smuzhiyun ), 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun VCPU_TP_PRINTK("handle diagnose call %04x (%s)", __entry->code, 283*4882a593Smuzhiyun __print_symbolic(__entry->code, diagnose_codes)) 284*4882a593Smuzhiyun ); 285*4882a593Smuzhiyun 286*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_lctl, 287*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, int g, int reg1, int reg3, u64 addr), 288*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, g, reg1, reg3, addr), 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun TP_STRUCT__entry( 291*4882a593Smuzhiyun VCPU_FIELD_COMMON 292*4882a593Smuzhiyun __field(int, g) 293*4882a593Smuzhiyun __field(int, reg1) 294*4882a593Smuzhiyun __field(int, reg3) 295*4882a593Smuzhiyun __field(u64, addr) 296*4882a593Smuzhiyun ), 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun TP_fast_assign( 299*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 300*4882a593Smuzhiyun __entry->g = g; 301*4882a593Smuzhiyun __entry->reg1 = reg1; 302*4882a593Smuzhiyun __entry->reg3 = reg3; 303*4882a593Smuzhiyun __entry->addr = addr; 304*4882a593Smuzhiyun ), 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun VCPU_TP_PRINTK("%s: loading cr %x-%x from %016llx", 307*4882a593Smuzhiyun __entry->g ? "lctlg" : "lctl", 308*4882a593Smuzhiyun __entry->reg1, __entry->reg3, __entry->addr) 309*4882a593Smuzhiyun ); 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_stctl, 312*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, int g, int reg1, int reg3, u64 addr), 313*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, g, reg1, reg3, addr), 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun TP_STRUCT__entry( 316*4882a593Smuzhiyun VCPU_FIELD_COMMON 317*4882a593Smuzhiyun __field(int, g) 318*4882a593Smuzhiyun __field(int, reg1) 319*4882a593Smuzhiyun __field(int, reg3) 320*4882a593Smuzhiyun __field(u64, addr) 321*4882a593Smuzhiyun ), 322*4882a593Smuzhiyun 323*4882a593Smuzhiyun TP_fast_assign( 324*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 325*4882a593Smuzhiyun __entry->g = g; 326*4882a593Smuzhiyun __entry->reg1 = reg1; 327*4882a593Smuzhiyun __entry->reg3 = reg3; 328*4882a593Smuzhiyun __entry->addr = addr; 329*4882a593Smuzhiyun ), 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun VCPU_TP_PRINTK("%s: storing cr %x-%x to %016llx", 332*4882a593Smuzhiyun __entry->g ? "stctg" : "stctl", 333*4882a593Smuzhiyun __entry->reg1, __entry->reg3, __entry->addr) 334*4882a593Smuzhiyun ); 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_prefix, 337*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, int set, u32 address), 338*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, set, address), 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun TP_STRUCT__entry( 341*4882a593Smuzhiyun VCPU_FIELD_COMMON 342*4882a593Smuzhiyun __field(int, set) 343*4882a593Smuzhiyun __field(u32, address) 344*4882a593Smuzhiyun ), 345*4882a593Smuzhiyun 346*4882a593Smuzhiyun TP_fast_assign( 347*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 348*4882a593Smuzhiyun __entry->set = set; 349*4882a593Smuzhiyun __entry->address = address; 350*4882a593Smuzhiyun ), 351*4882a593Smuzhiyun 352*4882a593Smuzhiyun VCPU_TP_PRINTK("%s prefix to %08x", 353*4882a593Smuzhiyun __entry->set ? "setting" : "storing", 354*4882a593Smuzhiyun __entry->address) 355*4882a593Smuzhiyun ); 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_stap, 358*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, u64 address), 359*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, address), 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun TP_STRUCT__entry( 362*4882a593Smuzhiyun VCPU_FIELD_COMMON 363*4882a593Smuzhiyun __field(u64, address) 364*4882a593Smuzhiyun ), 365*4882a593Smuzhiyun 366*4882a593Smuzhiyun TP_fast_assign( 367*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 368*4882a593Smuzhiyun __entry->address = address; 369*4882a593Smuzhiyun ), 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun VCPU_TP_PRINTK("storing cpu address to %016llx", 372*4882a593Smuzhiyun __entry->address) 373*4882a593Smuzhiyun ); 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_stfl, 376*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, unsigned int facility_list), 377*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, facility_list), 378*4882a593Smuzhiyun 379*4882a593Smuzhiyun TP_STRUCT__entry( 380*4882a593Smuzhiyun VCPU_FIELD_COMMON 381*4882a593Smuzhiyun __field(unsigned int, facility_list) 382*4882a593Smuzhiyun ), 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun TP_fast_assign( 385*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 386*4882a593Smuzhiyun __entry->facility_list = facility_list; 387*4882a593Smuzhiyun ), 388*4882a593Smuzhiyun 389*4882a593Smuzhiyun VCPU_TP_PRINTK("store facility list value %08x", 390*4882a593Smuzhiyun __entry->facility_list) 391*4882a593Smuzhiyun ); 392*4882a593Smuzhiyun 393*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_stsi, 394*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, int fc, int sel1, int sel2, u64 addr), 395*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, fc, sel1, sel2, addr), 396*4882a593Smuzhiyun 397*4882a593Smuzhiyun TP_STRUCT__entry( 398*4882a593Smuzhiyun VCPU_FIELD_COMMON 399*4882a593Smuzhiyun __field(int, fc) 400*4882a593Smuzhiyun __field(int, sel1) 401*4882a593Smuzhiyun __field(int, sel2) 402*4882a593Smuzhiyun __field(u64, addr) 403*4882a593Smuzhiyun ), 404*4882a593Smuzhiyun 405*4882a593Smuzhiyun TP_fast_assign( 406*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 407*4882a593Smuzhiyun __entry->fc = fc; 408*4882a593Smuzhiyun __entry->sel1 = sel1; 409*4882a593Smuzhiyun __entry->sel2 = sel2; 410*4882a593Smuzhiyun __entry->addr = addr; 411*4882a593Smuzhiyun ), 412*4882a593Smuzhiyun 413*4882a593Smuzhiyun VCPU_TP_PRINTK("STSI %d.%d.%d information stored to %016llx", 414*4882a593Smuzhiyun __entry->fc, __entry->sel1, __entry->sel2, 415*4882a593Smuzhiyun __entry->addr) 416*4882a593Smuzhiyun ); 417*4882a593Smuzhiyun 418*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_operexc, 419*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, __u16 ipa, __u32 ipb), 420*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, ipa, ipb), 421*4882a593Smuzhiyun 422*4882a593Smuzhiyun TP_STRUCT__entry( 423*4882a593Smuzhiyun VCPU_FIELD_COMMON 424*4882a593Smuzhiyun __field(__u64, instruction) 425*4882a593Smuzhiyun ), 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun TP_fast_assign( 428*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 429*4882a593Smuzhiyun __entry->instruction = ((__u64)ipa << 48) | 430*4882a593Smuzhiyun ((__u64)ipb << 16); 431*4882a593Smuzhiyun ), 432*4882a593Smuzhiyun 433*4882a593Smuzhiyun VCPU_TP_PRINTK("operation exception on instruction %016llx (%s)", 434*4882a593Smuzhiyun __entry->instruction, 435*4882a593Smuzhiyun __print_symbolic(icpt_insn_decoder(__entry->instruction), 436*4882a593Smuzhiyun icpt_insn_codes)) 437*4882a593Smuzhiyun ); 438*4882a593Smuzhiyun 439*4882a593Smuzhiyun TRACE_EVENT(kvm_s390_handle_sthyi, 440*4882a593Smuzhiyun TP_PROTO(VCPU_PROTO_COMMON, u64 code, u64 addr), 441*4882a593Smuzhiyun TP_ARGS(VCPU_ARGS_COMMON, code, addr), 442*4882a593Smuzhiyun 443*4882a593Smuzhiyun TP_STRUCT__entry( 444*4882a593Smuzhiyun VCPU_FIELD_COMMON 445*4882a593Smuzhiyun __field(u64, code) 446*4882a593Smuzhiyun __field(u64, addr) 447*4882a593Smuzhiyun ), 448*4882a593Smuzhiyun 449*4882a593Smuzhiyun TP_fast_assign( 450*4882a593Smuzhiyun VCPU_ASSIGN_COMMON 451*4882a593Smuzhiyun __entry->code = code; 452*4882a593Smuzhiyun __entry->addr = addr; 453*4882a593Smuzhiyun ), 454*4882a593Smuzhiyun 455*4882a593Smuzhiyun VCPU_TP_PRINTK("STHYI fc: %llu addr: %016llx", 456*4882a593Smuzhiyun __entry->code, __entry->addr) 457*4882a593Smuzhiyun ); 458*4882a593Smuzhiyun 459*4882a593Smuzhiyun #endif /* _TRACE_KVM_H */ 460*4882a593Smuzhiyun 461*4882a593Smuzhiyun /* This part must be outside protection */ 462*4882a593Smuzhiyun #include <trace/define_trace.h> 463