0001
0002 #if !defined(_TRACE_KVM_H) || defined(TRACE_HEADER_MULTI_READ)
0003 #define _TRACE_KVM_H
0004
0005 #include <linux/tracepoint.h>
0006 #include <asm/sie.h>
0007 #include <asm/debug.h>
0008 #include <asm/dis.h>
0009
0010 #undef TRACE_SYSTEM
0011 #define TRACE_SYSTEM kvm
0012 #define TRACE_INCLUDE_PATH .
0013 #undef TRACE_INCLUDE_FILE
0014 #define TRACE_INCLUDE_FILE trace
0015
0016
0017
0018
0019
0020 #define VCPU_PROTO_COMMON struct kvm_vcpu *vcpu
0021 #define VCPU_ARGS_COMMON vcpu
0022 #define VCPU_FIELD_COMMON __field(int, id) \
0023 __field(unsigned long, pswmask) \
0024 __field(unsigned long, pswaddr)
0025 #define VCPU_ASSIGN_COMMON do { \
0026 __entry->id = vcpu->vcpu_id; \
0027 __entry->pswmask = vcpu->arch.sie_block->gpsw.mask; \
0028 __entry->pswaddr = vcpu->arch.sie_block->gpsw.addr; \
0029 } while (0);
0030 #define VCPU_TP_PRINTK(p_str, p_args...) \
0031 TP_printk("%02d[%016lx-%016lx]: " p_str, __entry->id, \
0032 __entry->pswmask, __entry->pswaddr, p_args)
0033
0034 TRACE_EVENT(kvm_s390_skey_related_inst,
0035 TP_PROTO(VCPU_PROTO_COMMON),
0036 TP_ARGS(VCPU_ARGS_COMMON),
0037
0038 TP_STRUCT__entry(
0039 VCPU_FIELD_COMMON
0040 ),
0041
0042 TP_fast_assign(
0043 VCPU_ASSIGN_COMMON
0044 ),
0045 VCPU_TP_PRINTK("%s", "storage key related instruction")
0046 );
0047
0048 TRACE_EVENT(kvm_s390_major_guest_pfault,
0049 TP_PROTO(VCPU_PROTO_COMMON),
0050 TP_ARGS(VCPU_ARGS_COMMON),
0051
0052 TP_STRUCT__entry(
0053 VCPU_FIELD_COMMON
0054 ),
0055
0056 TP_fast_assign(
0057 VCPU_ASSIGN_COMMON
0058 ),
0059 VCPU_TP_PRINTK("%s", "major fault, maybe applicable for pfault")
0060 );
0061
0062 TRACE_EVENT(kvm_s390_pfault_init,
0063 TP_PROTO(VCPU_PROTO_COMMON, long pfault_token),
0064 TP_ARGS(VCPU_ARGS_COMMON, pfault_token),
0065
0066 TP_STRUCT__entry(
0067 VCPU_FIELD_COMMON
0068 __field(long, pfault_token)
0069 ),
0070
0071 TP_fast_assign(
0072 VCPU_ASSIGN_COMMON
0073 __entry->pfault_token = pfault_token;
0074 ),
0075 VCPU_TP_PRINTK("init pfault token %ld", __entry->pfault_token)
0076 );
0077
0078 TRACE_EVENT(kvm_s390_pfault_done,
0079 TP_PROTO(VCPU_PROTO_COMMON, long pfault_token),
0080 TP_ARGS(VCPU_ARGS_COMMON, pfault_token),
0081
0082 TP_STRUCT__entry(
0083 VCPU_FIELD_COMMON
0084 __field(long, pfault_token)
0085 ),
0086
0087 TP_fast_assign(
0088 VCPU_ASSIGN_COMMON
0089 __entry->pfault_token = pfault_token;
0090 ),
0091 VCPU_TP_PRINTK("done pfault token %ld", __entry->pfault_token)
0092 );
0093
0094
0095
0096
0097 TRACE_EVENT(kvm_s390_sie_enter,
0098 TP_PROTO(VCPU_PROTO_COMMON, int cpuflags),
0099 TP_ARGS(VCPU_ARGS_COMMON, cpuflags),
0100
0101 TP_STRUCT__entry(
0102 VCPU_FIELD_COMMON
0103 __field(int, cpuflags)
0104 ),
0105
0106 TP_fast_assign(
0107 VCPU_ASSIGN_COMMON
0108 __entry->cpuflags = cpuflags;
0109 ),
0110
0111 VCPU_TP_PRINTK("entering sie flags %x", __entry->cpuflags)
0112 );
0113
0114 TRACE_EVENT(kvm_s390_sie_fault,
0115 TP_PROTO(VCPU_PROTO_COMMON),
0116 TP_ARGS(VCPU_ARGS_COMMON),
0117
0118 TP_STRUCT__entry(
0119 VCPU_FIELD_COMMON
0120 ),
0121
0122 TP_fast_assign(
0123 VCPU_ASSIGN_COMMON
0124 ),
0125
0126 VCPU_TP_PRINTK("%s", "fault in sie instruction")
0127 );
0128
0129 TRACE_EVENT(kvm_s390_sie_exit,
0130 TP_PROTO(VCPU_PROTO_COMMON, u8 icptcode),
0131 TP_ARGS(VCPU_ARGS_COMMON, icptcode),
0132
0133 TP_STRUCT__entry(
0134 VCPU_FIELD_COMMON
0135 __field(u8, icptcode)
0136 ),
0137
0138 TP_fast_assign(
0139 VCPU_ASSIGN_COMMON
0140 __entry->icptcode = icptcode;
0141 ),
0142
0143 VCPU_TP_PRINTK("exit sie icptcode %d (%s)", __entry->icptcode,
0144 __print_symbolic(__entry->icptcode,
0145 sie_intercept_code))
0146 );
0147
0148
0149
0150
0151 TRACE_EVENT(kvm_s390_intercept_instruction,
0152 TP_PROTO(VCPU_PROTO_COMMON, __u16 ipa, __u32 ipb),
0153 TP_ARGS(VCPU_ARGS_COMMON, ipa, ipb),
0154
0155 TP_STRUCT__entry(
0156 VCPU_FIELD_COMMON
0157 __field(__u64, instruction)
0158 ),
0159
0160 TP_fast_assign(
0161 VCPU_ASSIGN_COMMON
0162 __entry->instruction = ((__u64)ipa << 48) |
0163 ((__u64)ipb << 16);
0164 ),
0165
0166 VCPU_TP_PRINTK("intercepted instruction %016llx (%s)",
0167 __entry->instruction,
0168 __print_symbolic(icpt_insn_decoder(__entry->instruction),
0169 icpt_insn_codes))
0170 );
0171
0172
0173
0174
0175 TRACE_EVENT(kvm_s390_intercept_prog,
0176 TP_PROTO(VCPU_PROTO_COMMON, __u16 code),
0177 TP_ARGS(VCPU_ARGS_COMMON, code),
0178
0179 TP_STRUCT__entry(
0180 VCPU_FIELD_COMMON
0181 __field(__u16, code)
0182 ),
0183
0184 TP_fast_assign(
0185 VCPU_ASSIGN_COMMON
0186 __entry->code = code;
0187 ),
0188
0189 VCPU_TP_PRINTK("intercepted program interruption %04x (%s)",
0190 __entry->code,
0191 __print_symbolic(__entry->code,
0192 icpt_prog_codes))
0193 );
0194
0195
0196
0197
0198 TRACE_EVENT(kvm_s390_intercept_validity,
0199 TP_PROTO(VCPU_PROTO_COMMON, __u16 viwhy),
0200 TP_ARGS(VCPU_ARGS_COMMON, viwhy),
0201
0202 TP_STRUCT__entry(
0203 VCPU_FIELD_COMMON
0204 __field(__u16, viwhy)
0205 ),
0206
0207 TP_fast_assign(
0208 VCPU_ASSIGN_COMMON
0209 __entry->viwhy = viwhy;
0210 ),
0211
0212 VCPU_TP_PRINTK("got validity intercept %04x", __entry->viwhy)
0213 );
0214
0215
0216
0217
0218
0219 TRACE_EVENT(kvm_s390_handle_sigp,
0220 TP_PROTO(VCPU_PROTO_COMMON, __u8 order_code, __u16 cpu_addr, \
0221 __u32 parameter),
0222 TP_ARGS(VCPU_ARGS_COMMON, order_code, cpu_addr, parameter),
0223
0224 TP_STRUCT__entry(
0225 VCPU_FIELD_COMMON
0226 __field(__u8, order_code)
0227 __field(__u16, cpu_addr)
0228 __field(__u32, parameter)
0229 ),
0230
0231 TP_fast_assign(
0232 VCPU_ASSIGN_COMMON
0233 __entry->order_code = order_code;
0234 __entry->cpu_addr = cpu_addr;
0235 __entry->parameter = parameter;
0236 ),
0237
0238 VCPU_TP_PRINTK("handle sigp order %02x (%s), cpu address %04x, " \
0239 "parameter %08x", __entry->order_code,
0240 __print_symbolic(__entry->order_code,
0241 sigp_order_codes),
0242 __entry->cpu_addr, __entry->parameter)
0243 );
0244
0245 TRACE_EVENT(kvm_s390_handle_sigp_pei,
0246 TP_PROTO(VCPU_PROTO_COMMON, __u8 order_code, __u16 cpu_addr),
0247 TP_ARGS(VCPU_ARGS_COMMON, order_code, cpu_addr),
0248
0249 TP_STRUCT__entry(
0250 VCPU_FIELD_COMMON
0251 __field(__u8, order_code)
0252 __field(__u16, cpu_addr)
0253 ),
0254
0255 TP_fast_assign(
0256 VCPU_ASSIGN_COMMON
0257 __entry->order_code = order_code;
0258 __entry->cpu_addr = cpu_addr;
0259 ),
0260
0261 VCPU_TP_PRINTK("handle sigp pei order %02x (%s), cpu address %04x",
0262 __entry->order_code,
0263 __print_symbolic(__entry->order_code,
0264 sigp_order_codes),
0265 __entry->cpu_addr)
0266 );
0267
0268 TRACE_EVENT(kvm_s390_handle_diag,
0269 TP_PROTO(VCPU_PROTO_COMMON, __u16 code),
0270 TP_ARGS(VCPU_ARGS_COMMON, code),
0271
0272 TP_STRUCT__entry(
0273 VCPU_FIELD_COMMON
0274 __field(__u16, code)
0275 ),
0276
0277 TP_fast_assign(
0278 VCPU_ASSIGN_COMMON
0279 __entry->code = code;
0280 ),
0281
0282 VCPU_TP_PRINTK("handle diagnose call %04x (%s)", __entry->code,
0283 __print_symbolic(__entry->code, diagnose_codes))
0284 );
0285
0286 TRACE_EVENT(kvm_s390_handle_lctl,
0287 TP_PROTO(VCPU_PROTO_COMMON, int g, int reg1, int reg3, u64 addr),
0288 TP_ARGS(VCPU_ARGS_COMMON, g, reg1, reg3, addr),
0289
0290 TP_STRUCT__entry(
0291 VCPU_FIELD_COMMON
0292 __field(int, g)
0293 __field(int, reg1)
0294 __field(int, reg3)
0295 __field(u64, addr)
0296 ),
0297
0298 TP_fast_assign(
0299 VCPU_ASSIGN_COMMON
0300 __entry->g = g;
0301 __entry->reg1 = reg1;
0302 __entry->reg3 = reg3;
0303 __entry->addr = addr;
0304 ),
0305
0306 VCPU_TP_PRINTK("%s: loading cr %x-%x from %016llx",
0307 __entry->g ? "lctlg" : "lctl",
0308 __entry->reg1, __entry->reg3, __entry->addr)
0309 );
0310
0311 TRACE_EVENT(kvm_s390_handle_stctl,
0312 TP_PROTO(VCPU_PROTO_COMMON, int g, int reg1, int reg3, u64 addr),
0313 TP_ARGS(VCPU_ARGS_COMMON, g, reg1, reg3, addr),
0314
0315 TP_STRUCT__entry(
0316 VCPU_FIELD_COMMON
0317 __field(int, g)
0318 __field(int, reg1)
0319 __field(int, reg3)
0320 __field(u64, addr)
0321 ),
0322
0323 TP_fast_assign(
0324 VCPU_ASSIGN_COMMON
0325 __entry->g = g;
0326 __entry->reg1 = reg1;
0327 __entry->reg3 = reg3;
0328 __entry->addr = addr;
0329 ),
0330
0331 VCPU_TP_PRINTK("%s: storing cr %x-%x to %016llx",
0332 __entry->g ? "stctg" : "stctl",
0333 __entry->reg1, __entry->reg3, __entry->addr)
0334 );
0335
0336 TRACE_EVENT(kvm_s390_handle_prefix,
0337 TP_PROTO(VCPU_PROTO_COMMON, int set, u32 address),
0338 TP_ARGS(VCPU_ARGS_COMMON, set, address),
0339
0340 TP_STRUCT__entry(
0341 VCPU_FIELD_COMMON
0342 __field(int, set)
0343 __field(u32, address)
0344 ),
0345
0346 TP_fast_assign(
0347 VCPU_ASSIGN_COMMON
0348 __entry->set = set;
0349 __entry->address = address;
0350 ),
0351
0352 VCPU_TP_PRINTK("%s prefix to %08x",
0353 __entry->set ? "setting" : "storing",
0354 __entry->address)
0355 );
0356
0357 TRACE_EVENT(kvm_s390_handle_stap,
0358 TP_PROTO(VCPU_PROTO_COMMON, u64 address),
0359 TP_ARGS(VCPU_ARGS_COMMON, address),
0360
0361 TP_STRUCT__entry(
0362 VCPU_FIELD_COMMON
0363 __field(u64, address)
0364 ),
0365
0366 TP_fast_assign(
0367 VCPU_ASSIGN_COMMON
0368 __entry->address = address;
0369 ),
0370
0371 VCPU_TP_PRINTK("storing cpu address to %016llx",
0372 __entry->address)
0373 );
0374
0375 TRACE_EVENT(kvm_s390_handle_stfl,
0376 TP_PROTO(VCPU_PROTO_COMMON, unsigned int facility_list),
0377 TP_ARGS(VCPU_ARGS_COMMON, facility_list),
0378
0379 TP_STRUCT__entry(
0380 VCPU_FIELD_COMMON
0381 __field(unsigned int, facility_list)
0382 ),
0383
0384 TP_fast_assign(
0385 VCPU_ASSIGN_COMMON
0386 __entry->facility_list = facility_list;
0387 ),
0388
0389 VCPU_TP_PRINTK("store facility list value %08x",
0390 __entry->facility_list)
0391 );
0392
0393 TRACE_EVENT(kvm_s390_handle_stsi,
0394 TP_PROTO(VCPU_PROTO_COMMON, int fc, int sel1, int sel2, u64 addr),
0395 TP_ARGS(VCPU_ARGS_COMMON, fc, sel1, sel2, addr),
0396
0397 TP_STRUCT__entry(
0398 VCPU_FIELD_COMMON
0399 __field(int, fc)
0400 __field(int, sel1)
0401 __field(int, sel2)
0402 __field(u64, addr)
0403 ),
0404
0405 TP_fast_assign(
0406 VCPU_ASSIGN_COMMON
0407 __entry->fc = fc;
0408 __entry->sel1 = sel1;
0409 __entry->sel2 = sel2;
0410 __entry->addr = addr;
0411 ),
0412
0413 VCPU_TP_PRINTK("STSI %d.%d.%d information stored to %016llx",
0414 __entry->fc, __entry->sel1, __entry->sel2,
0415 __entry->addr)
0416 );
0417
0418 TRACE_EVENT(kvm_s390_handle_operexc,
0419 TP_PROTO(VCPU_PROTO_COMMON, __u16 ipa, __u32 ipb),
0420 TP_ARGS(VCPU_ARGS_COMMON, ipa, ipb),
0421
0422 TP_STRUCT__entry(
0423 VCPU_FIELD_COMMON
0424 __field(__u64, instruction)
0425 ),
0426
0427 TP_fast_assign(
0428 VCPU_ASSIGN_COMMON
0429 __entry->instruction = ((__u64)ipa << 48) |
0430 ((__u64)ipb << 16);
0431 ),
0432
0433 VCPU_TP_PRINTK("operation exception on instruction %016llx (%s)",
0434 __entry->instruction,
0435 __print_symbolic(icpt_insn_decoder(__entry->instruction),
0436 icpt_insn_codes))
0437 );
0438
0439 TRACE_EVENT(kvm_s390_handle_sthyi,
0440 TP_PROTO(VCPU_PROTO_COMMON, u64 code, u64 addr),
0441 TP_ARGS(VCPU_ARGS_COMMON, code, addr),
0442
0443 TP_STRUCT__entry(
0444 VCPU_FIELD_COMMON
0445 __field(u64, code)
0446 __field(u64, addr)
0447 ),
0448
0449 TP_fast_assign(
0450 VCPU_ASSIGN_COMMON
0451 __entry->code = code;
0452 __entry->addr = addr;
0453 ),
0454
0455 VCPU_TP_PRINTK("STHYI fc: %llu addr: %016llx",
0456 __entry->code, __entry->addr)
0457 );
0458
0459 #endif
0460
0461
0462 #include <trace/define_trace.h>