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