1 /* 2 * Copyright 2015 IBM Corp. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 7 * 2 of the License, or (at your option) any later version. 8 */ 9 10 #undef TRACE_SYSTEM 11 #define TRACE_SYSTEM cxl 12 13 #if !defined(_CXL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ) 14 #define _CXL_TRACE_H 15 16 #include <linux/tracepoint.h> 17 18 #include "cxl.h" 19 20 #define DSISR_FLAGS \ 21 { CXL_PSL_DSISR_An_DS, "DS" }, \ 22 { CXL_PSL_DSISR_An_DM, "DM" }, \ 23 { CXL_PSL_DSISR_An_ST, "ST" }, \ 24 { CXL_PSL_DSISR_An_UR, "UR" }, \ 25 { CXL_PSL_DSISR_An_PE, "PE" }, \ 26 { CXL_PSL_DSISR_An_AE, "AE" }, \ 27 { CXL_PSL_DSISR_An_OC, "OC" }, \ 28 { CXL_PSL_DSISR_An_M, "M" }, \ 29 { CXL_PSL_DSISR_An_P, "P" }, \ 30 { CXL_PSL_DSISR_An_A, "A" }, \ 31 { CXL_PSL_DSISR_An_S, "S" }, \ 32 { CXL_PSL_DSISR_An_K, "K" } 33 34 #define TFC_FLAGS \ 35 { CXL_PSL_TFC_An_A, "A" }, \ 36 { CXL_PSL_TFC_An_C, "C" }, \ 37 { CXL_PSL_TFC_An_AE, "AE" }, \ 38 { CXL_PSL_TFC_An_R, "R" } 39 40 #define LLCMD_NAMES \ 41 { CXL_SPA_SW_CMD_TERMINATE, "TERMINATE" }, \ 42 { CXL_SPA_SW_CMD_REMOVE, "REMOVE" }, \ 43 { CXL_SPA_SW_CMD_SUSPEND, "SUSPEND" }, \ 44 { CXL_SPA_SW_CMD_RESUME, "RESUME" }, \ 45 { CXL_SPA_SW_CMD_ADD, "ADD" }, \ 46 { CXL_SPA_SW_CMD_UPDATE, "UPDATE" } 47 48 #define AFU_COMMANDS \ 49 { 0, "DISABLE" }, \ 50 { CXL_AFU_Cntl_An_E, "ENABLE" }, \ 51 { CXL_AFU_Cntl_An_RA, "RESET" } 52 53 #define PSL_COMMANDS \ 54 { CXL_PSL_SCNTL_An_Pc, "PURGE" }, \ 55 { CXL_PSL_SCNTL_An_Sc, "SUSPEND" } 56 57 58 DECLARE_EVENT_CLASS(cxl_pe_class, 59 TP_PROTO(struct cxl_context *ctx), 60 61 TP_ARGS(ctx), 62 63 TP_STRUCT__entry( 64 __field(u8, card) 65 __field(u8, afu) 66 __field(u16, pe) 67 ), 68 69 TP_fast_assign( 70 __entry->card = ctx->afu->adapter->adapter_num; 71 __entry->afu = ctx->afu->slice; 72 __entry->pe = ctx->pe; 73 ), 74 75 TP_printk("afu%i.%i pe=%i", 76 __entry->card, 77 __entry->afu, 78 __entry->pe 79 ) 80 ); 81 82 83 TRACE_EVENT(cxl_attach, 84 TP_PROTO(struct cxl_context *ctx, u64 wed, s16 num_interrupts, u64 amr), 85 86 TP_ARGS(ctx, wed, num_interrupts, amr), 87 88 TP_STRUCT__entry( 89 __field(u8, card) 90 __field(u8, afu) 91 __field(u16, pe) 92 __field(pid_t, pid) 93 __field(u64, wed) 94 __field(u64, amr) 95 __field(s16, num_interrupts) 96 ), 97 98 TP_fast_assign( 99 __entry->card = ctx->afu->adapter->adapter_num; 100 __entry->afu = ctx->afu->slice; 101 __entry->pe = ctx->pe; 102 __entry->pid = pid_nr(ctx->pid); 103 __entry->wed = wed; 104 __entry->amr = amr; 105 __entry->num_interrupts = num_interrupts; 106 ), 107 108 TP_printk("afu%i.%i pid=%i pe=%i wed=0x%016llx irqs=%i amr=0x%llx", 109 __entry->card, 110 __entry->afu, 111 __entry->pid, 112 __entry->pe, 113 __entry->wed, 114 __entry->num_interrupts, 115 __entry->amr 116 ) 117 ); 118 119 DEFINE_EVENT(cxl_pe_class, cxl_detach, 120 TP_PROTO(struct cxl_context *ctx), 121 TP_ARGS(ctx) 122 ); 123 124 TRACE_EVENT(cxl_afu_irq, 125 TP_PROTO(struct cxl_context *ctx, int afu_irq, int virq, irq_hw_number_t hwirq), 126 127 TP_ARGS(ctx, afu_irq, virq, hwirq), 128 129 TP_STRUCT__entry( 130 __field(u8, card) 131 __field(u8, afu) 132 __field(u16, pe) 133 __field(u16, afu_irq) 134 __field(int, virq) 135 __field(irq_hw_number_t, hwirq) 136 ), 137 138 TP_fast_assign( 139 __entry->card = ctx->afu->adapter->adapter_num; 140 __entry->afu = ctx->afu->slice; 141 __entry->pe = ctx->pe; 142 __entry->afu_irq = afu_irq; 143 __entry->virq = virq; 144 __entry->hwirq = hwirq; 145 ), 146 147 TP_printk("afu%i.%i pe=%i afu_irq=%i virq=%i hwirq=0x%lx", 148 __entry->card, 149 __entry->afu, 150 __entry->pe, 151 __entry->afu_irq, 152 __entry->virq, 153 __entry->hwirq 154 ) 155 ); 156 157 TRACE_EVENT(cxl_psl_irq, 158 TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar), 159 160 TP_ARGS(ctx, irq, dsisr, dar), 161 162 TP_STRUCT__entry( 163 __field(u8, card) 164 __field(u8, afu) 165 __field(u16, pe) 166 __field(int, irq) 167 __field(u64, dsisr) 168 __field(u64, dar) 169 ), 170 171 TP_fast_assign( 172 __entry->card = ctx->afu->adapter->adapter_num; 173 __entry->afu = ctx->afu->slice; 174 __entry->pe = ctx->pe; 175 __entry->irq = irq; 176 __entry->dsisr = dsisr; 177 __entry->dar = dar; 178 ), 179 180 TP_printk("afu%i.%i pe=%i irq=%i dsisr=%s dar=0x%016llx", 181 __entry->card, 182 __entry->afu, 183 __entry->pe, 184 __entry->irq, 185 __print_flags(__entry->dsisr, "|", DSISR_FLAGS), 186 __entry->dar 187 ) 188 ); 189 190 TRACE_EVENT(cxl_psl_irq_ack, 191 TP_PROTO(struct cxl_context *ctx, u64 tfc), 192 193 TP_ARGS(ctx, tfc), 194 195 TP_STRUCT__entry( 196 __field(u8, card) 197 __field(u8, afu) 198 __field(u16, pe) 199 __field(u64, tfc) 200 ), 201 202 TP_fast_assign( 203 __entry->card = ctx->afu->adapter->adapter_num; 204 __entry->afu = ctx->afu->slice; 205 __entry->pe = ctx->pe; 206 __entry->tfc = tfc; 207 ), 208 209 TP_printk("afu%i.%i pe=%i tfc=%s", 210 __entry->card, 211 __entry->afu, 212 __entry->pe, 213 __print_flags(__entry->tfc, "|", TFC_FLAGS) 214 ) 215 ); 216 217 TRACE_EVENT(cxl_ste_miss, 218 TP_PROTO(struct cxl_context *ctx, u64 dar), 219 220 TP_ARGS(ctx, dar), 221 222 TP_STRUCT__entry( 223 __field(u8, card) 224 __field(u8, afu) 225 __field(u16, pe) 226 __field(u64, dar) 227 ), 228 229 TP_fast_assign( 230 __entry->card = ctx->afu->adapter->adapter_num; 231 __entry->afu = ctx->afu->slice; 232 __entry->pe = ctx->pe; 233 __entry->dar = dar; 234 ), 235 236 TP_printk("afu%i.%i pe=%i dar=0x%016llx", 237 __entry->card, 238 __entry->afu, 239 __entry->pe, 240 __entry->dar 241 ) 242 ); 243 244 TRACE_EVENT(cxl_ste_write, 245 TP_PROTO(struct cxl_context *ctx, unsigned int idx, u64 e, u64 v), 246 247 TP_ARGS(ctx, idx, e, v), 248 249 TP_STRUCT__entry( 250 __field(u8, card) 251 __field(u8, afu) 252 __field(u16, pe) 253 __field(unsigned int, idx) 254 __field(u64, e) 255 __field(u64, v) 256 ), 257 258 TP_fast_assign( 259 __entry->card = ctx->afu->adapter->adapter_num; 260 __entry->afu = ctx->afu->slice; 261 __entry->pe = ctx->pe; 262 __entry->idx = idx; 263 __entry->e = e; 264 __entry->v = v; 265 ), 266 267 TP_printk("afu%i.%i pe=%i SSTE[%i] E=0x%016llx V=0x%016llx", 268 __entry->card, 269 __entry->afu, 270 __entry->pe, 271 __entry->idx, 272 __entry->e, 273 __entry->v 274 ) 275 ); 276 277 TRACE_EVENT(cxl_pte_miss, 278 TP_PROTO(struct cxl_context *ctx, u64 dsisr, u64 dar), 279 280 TP_ARGS(ctx, dsisr, dar), 281 282 TP_STRUCT__entry( 283 __field(u8, card) 284 __field(u8, afu) 285 __field(u16, pe) 286 __field(u64, dsisr) 287 __field(u64, dar) 288 ), 289 290 TP_fast_assign( 291 __entry->card = ctx->afu->adapter->adapter_num; 292 __entry->afu = ctx->afu->slice; 293 __entry->pe = ctx->pe; 294 __entry->dsisr = dsisr; 295 __entry->dar = dar; 296 ), 297 298 TP_printk("afu%i.%i pe=%i dsisr=%s dar=0x%016llx", 299 __entry->card, 300 __entry->afu, 301 __entry->pe, 302 __print_flags(__entry->dsisr, "|", DSISR_FLAGS), 303 __entry->dar 304 ) 305 ); 306 307 TRACE_EVENT(cxl_llcmd, 308 TP_PROTO(struct cxl_context *ctx, u64 cmd), 309 310 TP_ARGS(ctx, cmd), 311 312 TP_STRUCT__entry( 313 __field(u8, card) 314 __field(u8, afu) 315 __field(u16, pe) 316 __field(u64, cmd) 317 ), 318 319 TP_fast_assign( 320 __entry->card = ctx->afu->adapter->adapter_num; 321 __entry->afu = ctx->afu->slice; 322 __entry->pe = ctx->pe; 323 __entry->cmd = cmd; 324 ), 325 326 TP_printk("afu%i.%i pe=%i cmd=%s", 327 __entry->card, 328 __entry->afu, 329 __entry->pe, 330 __print_symbolic_u64(__entry->cmd, LLCMD_NAMES) 331 ) 332 ); 333 334 TRACE_EVENT(cxl_llcmd_done, 335 TP_PROTO(struct cxl_context *ctx, u64 cmd, int rc), 336 337 TP_ARGS(ctx, cmd, rc), 338 339 TP_STRUCT__entry( 340 __field(u8, card) 341 __field(u8, afu) 342 __field(u16, pe) 343 __field(u64, cmd) 344 __field(int, rc) 345 ), 346 347 TP_fast_assign( 348 __entry->card = ctx->afu->adapter->adapter_num; 349 __entry->afu = ctx->afu->slice; 350 __entry->pe = ctx->pe; 351 __entry->rc = rc; 352 __entry->cmd = cmd; 353 ), 354 355 TP_printk("afu%i.%i pe=%i cmd=%s rc=%i", 356 __entry->card, 357 __entry->afu, 358 __entry->pe, 359 __print_symbolic_u64(__entry->cmd, LLCMD_NAMES), 360 __entry->rc 361 ) 362 ); 363 364 DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl, 365 TP_PROTO(struct cxl_afu *afu, u64 cmd), 366 367 TP_ARGS(afu, cmd), 368 369 TP_STRUCT__entry( 370 __field(u8, card) 371 __field(u8, afu) 372 __field(u64, cmd) 373 ), 374 375 TP_fast_assign( 376 __entry->card = afu->adapter->adapter_num; 377 __entry->afu = afu->slice; 378 __entry->cmd = cmd; 379 ), 380 381 TP_printk("afu%i.%i cmd=%s", 382 __entry->card, 383 __entry->afu, 384 __print_symbolic_u64(__entry->cmd, AFU_COMMANDS) 385 ) 386 ); 387 388 DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl_done, 389 TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc), 390 391 TP_ARGS(afu, cmd, rc), 392 393 TP_STRUCT__entry( 394 __field(u8, card) 395 __field(u8, afu) 396 __field(u64, cmd) 397 __field(int, rc) 398 ), 399 400 TP_fast_assign( 401 __entry->card = afu->adapter->adapter_num; 402 __entry->afu = afu->slice; 403 __entry->rc = rc; 404 __entry->cmd = cmd; 405 ), 406 407 TP_printk("afu%i.%i cmd=%s rc=%i", 408 __entry->card, 409 __entry->afu, 410 __print_symbolic_u64(__entry->cmd, AFU_COMMANDS), 411 __entry->rc 412 ) 413 ); 414 415 DEFINE_EVENT(cxl_afu_psl_ctrl, cxl_afu_ctrl, 416 TP_PROTO(struct cxl_afu *afu, u64 cmd), 417 TP_ARGS(afu, cmd) 418 ); 419 420 DEFINE_EVENT(cxl_afu_psl_ctrl_done, cxl_afu_ctrl_done, 421 TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc), 422 TP_ARGS(afu, cmd, rc) 423 ); 424 425 DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl, cxl_psl_ctrl, 426 TP_PROTO(struct cxl_afu *afu, u64 cmd), 427 TP_ARGS(afu, cmd), 428 429 TP_printk("psl%i.%i cmd=%s", 430 __entry->card, 431 __entry->afu, 432 __print_symbolic_u64(__entry->cmd, PSL_COMMANDS) 433 ) 434 ); 435 436 DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl_done, cxl_psl_ctrl_done, 437 TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc), 438 TP_ARGS(afu, cmd, rc), 439 440 TP_printk("psl%i.%i cmd=%s rc=%i", 441 __entry->card, 442 __entry->afu, 443 __print_symbolic_u64(__entry->cmd, PSL_COMMANDS), 444 __entry->rc 445 ) 446 ); 447 448 DEFINE_EVENT(cxl_pe_class, cxl_slbia, 449 TP_PROTO(struct cxl_context *ctx), 450 TP_ARGS(ctx) 451 ); 452 453 #endif /* _CXL_TRACE_H */ 454 455 /* This part must be outside protection */ 456 #undef TRACE_INCLUDE_PATH 457 #define TRACE_INCLUDE_PATH . 458 #define TRACE_INCLUDE_FILE trace 459 #include <trace/define_trace.h> 460