root/arch/s390/kvm/trace.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


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

/* [<][>][^][v][top][bottom][index][help] */