xref: /openbmc/linux/drivers/misc/cxl/trace.h (revision f7d84fa7)
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_psl9_flags(flags) \
21 	__print_flags(flags, "|", \
22 		{ CXL_PSL9_DSISR_An_CO_MASK,	"FR" }, \
23 		{ CXL_PSL9_DSISR_An_TF,		"TF" }, \
24 		{ CXL_PSL9_DSISR_An_PE,		"PE" }, \
25 		{ CXL_PSL9_DSISR_An_AE,		"AE" }, \
26 		{ CXL_PSL9_DSISR_An_OC,		"OC" }, \
27 		{ CXL_PSL9_DSISR_An_S,		"S" })
28 
29 #define DSISR_FLAGS \
30 	{ CXL_PSL_DSISR_An_DS,	"DS" }, \
31 	{ CXL_PSL_DSISR_An_DM,	"DM" }, \
32 	{ CXL_PSL_DSISR_An_ST,	"ST" }, \
33 	{ CXL_PSL_DSISR_An_UR,	"UR" }, \
34 	{ CXL_PSL_DSISR_An_PE,	"PE" }, \
35 	{ CXL_PSL_DSISR_An_AE,	"AE" }, \
36 	{ CXL_PSL_DSISR_An_OC,	"OC" }, \
37 	{ CXL_PSL_DSISR_An_M,	"M" }, \
38 	{ CXL_PSL_DSISR_An_P,	"P" }, \
39 	{ CXL_PSL_DSISR_An_A,	"A" }, \
40 	{ CXL_PSL_DSISR_An_S,	"S" }, \
41 	{ CXL_PSL_DSISR_An_K,	"K" }
42 
43 #define TFC_FLAGS \
44 	{ CXL_PSL_TFC_An_A,	"A" }, \
45 	{ CXL_PSL_TFC_An_C,	"C" }, \
46 	{ CXL_PSL_TFC_An_AE,	"AE" }, \
47 	{ CXL_PSL_TFC_An_R,	"R" }
48 
49 #define LLCMD_NAMES \
50 	{ CXL_SPA_SW_CMD_TERMINATE,	"TERMINATE" }, \
51 	{ CXL_SPA_SW_CMD_REMOVE,	"REMOVE" }, \
52 	{ CXL_SPA_SW_CMD_SUSPEND,	"SUSPEND" }, \
53 	{ CXL_SPA_SW_CMD_RESUME,	"RESUME" }, \
54 	{ CXL_SPA_SW_CMD_ADD,		"ADD" }, \
55 	{ CXL_SPA_SW_CMD_UPDATE,	"UPDATE" }
56 
57 #define AFU_COMMANDS \
58 	{ 0,			"DISABLE" }, \
59 	{ CXL_AFU_Cntl_An_E,	"ENABLE" }, \
60 	{ CXL_AFU_Cntl_An_RA,	"RESET" }
61 
62 #define PSL_COMMANDS \
63 	{ CXL_PSL_SCNTL_An_Pc,	"PURGE" }, \
64 	{ CXL_PSL_SCNTL_An_Sc,	"SUSPEND" }
65 
66 
67 DECLARE_EVENT_CLASS(cxl_pe_class,
68 	TP_PROTO(struct cxl_context *ctx),
69 
70 	TP_ARGS(ctx),
71 
72 	TP_STRUCT__entry(
73 		__field(u8, card)
74 		__field(u8, afu)
75 		__field(u16, pe)
76 	),
77 
78 	TP_fast_assign(
79 		__entry->card = ctx->afu->adapter->adapter_num;
80 		__entry->afu = ctx->afu->slice;
81 		__entry->pe = ctx->pe;
82 	),
83 
84 	TP_printk("afu%i.%i pe=%i",
85 		__entry->card,
86 		__entry->afu,
87 		__entry->pe
88 	)
89 );
90 
91 
92 TRACE_EVENT(cxl_attach,
93 	TP_PROTO(struct cxl_context *ctx, u64 wed, s16 num_interrupts, u64 amr),
94 
95 	TP_ARGS(ctx, wed, num_interrupts, amr),
96 
97 	TP_STRUCT__entry(
98 		__field(u8, card)
99 		__field(u8, afu)
100 		__field(u16, pe)
101 		__field(pid_t, pid)
102 		__field(u64, wed)
103 		__field(u64, amr)
104 		__field(s16, num_interrupts)
105 	),
106 
107 	TP_fast_assign(
108 		__entry->card = ctx->afu->adapter->adapter_num;
109 		__entry->afu = ctx->afu->slice;
110 		__entry->pe = ctx->pe;
111 		__entry->pid = pid_nr(ctx->pid);
112 		__entry->wed = wed;
113 		__entry->amr = amr;
114 		__entry->num_interrupts = num_interrupts;
115 	),
116 
117 	TP_printk("afu%i.%i pid=%i pe=%i wed=0x%016llx irqs=%i amr=0x%llx",
118 		__entry->card,
119 		__entry->afu,
120 		__entry->pid,
121 		__entry->pe,
122 		__entry->wed,
123 		__entry->num_interrupts,
124 		__entry->amr
125 	)
126 );
127 
128 DEFINE_EVENT(cxl_pe_class, cxl_detach,
129 	TP_PROTO(struct cxl_context *ctx),
130 	TP_ARGS(ctx)
131 );
132 
133 TRACE_EVENT(cxl_afu_irq,
134 	TP_PROTO(struct cxl_context *ctx, int afu_irq, int virq, irq_hw_number_t hwirq),
135 
136 	TP_ARGS(ctx, afu_irq, virq, hwirq),
137 
138 	TP_STRUCT__entry(
139 		__field(u8, card)
140 		__field(u8, afu)
141 		__field(u16, pe)
142 		__field(u16, afu_irq)
143 		__field(int, virq)
144 		__field(irq_hw_number_t, hwirq)
145 	),
146 
147 	TP_fast_assign(
148 		__entry->card = ctx->afu->adapter->adapter_num;
149 		__entry->afu = ctx->afu->slice;
150 		__entry->pe = ctx->pe;
151 		__entry->afu_irq = afu_irq;
152 		__entry->virq = virq;
153 		__entry->hwirq = hwirq;
154 	),
155 
156 	TP_printk("afu%i.%i pe=%i afu_irq=%i virq=%i hwirq=0x%lx",
157 		__entry->card,
158 		__entry->afu,
159 		__entry->pe,
160 		__entry->afu_irq,
161 		__entry->virq,
162 		__entry->hwirq
163 	)
164 );
165 
166 TRACE_EVENT(cxl_psl9_irq,
167 	TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
168 
169 	TP_ARGS(ctx, irq, dsisr, dar),
170 
171 	TP_STRUCT__entry(
172 		__field(u8, card)
173 		__field(u8, afu)
174 		__field(u16, pe)
175 		__field(int, irq)
176 		__field(u64, dsisr)
177 		__field(u64, dar)
178 	),
179 
180 	TP_fast_assign(
181 		__entry->card = ctx->afu->adapter->adapter_num;
182 		__entry->afu = ctx->afu->slice;
183 		__entry->pe = ctx->pe;
184 		__entry->irq = irq;
185 		__entry->dsisr = dsisr;
186 		__entry->dar = dar;
187 	),
188 
189 	TP_printk("afu%i.%i pe=%i irq=%i dsisr=0x%016llx dsisr=%s dar=0x%016llx",
190 		__entry->card,
191 		__entry->afu,
192 		__entry->pe,
193 		__entry->irq,
194 		__entry->dsisr,
195 		dsisr_psl9_flags(__entry->dsisr),
196 		__entry->dar
197 	)
198 );
199 
200 TRACE_EVENT(cxl_psl_irq,
201 	TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
202 
203 	TP_ARGS(ctx, irq, dsisr, dar),
204 
205 	TP_STRUCT__entry(
206 		__field(u8, card)
207 		__field(u8, afu)
208 		__field(u16, pe)
209 		__field(int, irq)
210 		__field(u64, dsisr)
211 		__field(u64, dar)
212 	),
213 
214 	TP_fast_assign(
215 		__entry->card = ctx->afu->adapter->adapter_num;
216 		__entry->afu = ctx->afu->slice;
217 		__entry->pe = ctx->pe;
218 		__entry->irq = irq;
219 		__entry->dsisr = dsisr;
220 		__entry->dar = dar;
221 	),
222 
223 	TP_printk("afu%i.%i pe=%i irq=%i dsisr=%s dar=0x%016llx",
224 		__entry->card,
225 		__entry->afu,
226 		__entry->pe,
227 		__entry->irq,
228 		__print_flags(__entry->dsisr, "|", DSISR_FLAGS),
229 		__entry->dar
230 	)
231 );
232 
233 TRACE_EVENT(cxl_psl_irq_ack,
234 	TP_PROTO(struct cxl_context *ctx, u64 tfc),
235 
236 	TP_ARGS(ctx, tfc),
237 
238 	TP_STRUCT__entry(
239 		__field(u8, card)
240 		__field(u8, afu)
241 		__field(u16, pe)
242 		__field(u64, tfc)
243 	),
244 
245 	TP_fast_assign(
246 		__entry->card = ctx->afu->adapter->adapter_num;
247 		__entry->afu = ctx->afu->slice;
248 		__entry->pe = ctx->pe;
249 		__entry->tfc = tfc;
250 	),
251 
252 	TP_printk("afu%i.%i pe=%i tfc=%s",
253 		__entry->card,
254 		__entry->afu,
255 		__entry->pe,
256 		__print_flags(__entry->tfc, "|", TFC_FLAGS)
257 	)
258 );
259 
260 TRACE_EVENT(cxl_ste_miss,
261 	TP_PROTO(struct cxl_context *ctx, u64 dar),
262 
263 	TP_ARGS(ctx, dar),
264 
265 	TP_STRUCT__entry(
266 		__field(u8, card)
267 		__field(u8, afu)
268 		__field(u16, pe)
269 		__field(u64, dar)
270 	),
271 
272 	TP_fast_assign(
273 		__entry->card = ctx->afu->adapter->adapter_num;
274 		__entry->afu = ctx->afu->slice;
275 		__entry->pe = ctx->pe;
276 		__entry->dar = dar;
277 	),
278 
279 	TP_printk("afu%i.%i pe=%i dar=0x%016llx",
280 		__entry->card,
281 		__entry->afu,
282 		__entry->pe,
283 		__entry->dar
284 	)
285 );
286 
287 TRACE_EVENT(cxl_ste_write,
288 	TP_PROTO(struct cxl_context *ctx, unsigned int idx, u64 e, u64 v),
289 
290 	TP_ARGS(ctx, idx, e, v),
291 
292 	TP_STRUCT__entry(
293 		__field(u8, card)
294 		__field(u8, afu)
295 		__field(u16, pe)
296 		__field(unsigned int, idx)
297 		__field(u64, e)
298 		__field(u64, v)
299 	),
300 
301 	TP_fast_assign(
302 		__entry->card = ctx->afu->adapter->adapter_num;
303 		__entry->afu = ctx->afu->slice;
304 		__entry->pe = ctx->pe;
305 		__entry->idx = idx;
306 		__entry->e = e;
307 		__entry->v = v;
308 	),
309 
310 	TP_printk("afu%i.%i pe=%i SSTE[%i] E=0x%016llx V=0x%016llx",
311 		__entry->card,
312 		__entry->afu,
313 		__entry->pe,
314 		__entry->idx,
315 		__entry->e,
316 		__entry->v
317 	)
318 );
319 
320 TRACE_EVENT(cxl_pte_miss,
321 	TP_PROTO(struct cxl_context *ctx, u64 dsisr, u64 dar),
322 
323 	TP_ARGS(ctx, dsisr, dar),
324 
325 	TP_STRUCT__entry(
326 		__field(u8, card)
327 		__field(u8, afu)
328 		__field(u16, pe)
329 		__field(u64, dsisr)
330 		__field(u64, dar)
331 	),
332 
333 	TP_fast_assign(
334 		__entry->card = ctx->afu->adapter->adapter_num;
335 		__entry->afu = ctx->afu->slice;
336 		__entry->pe = ctx->pe;
337 		__entry->dsisr = dsisr;
338 		__entry->dar = dar;
339 	),
340 
341 	TP_printk("afu%i.%i pe=%i dsisr=%s dar=0x%016llx",
342 		__entry->card,
343 		__entry->afu,
344 		__entry->pe,
345 		__print_flags(__entry->dsisr, "|", DSISR_FLAGS),
346 		__entry->dar
347 	)
348 );
349 
350 TRACE_EVENT(cxl_llcmd,
351 	TP_PROTO(struct cxl_context *ctx, u64 cmd),
352 
353 	TP_ARGS(ctx, cmd),
354 
355 	TP_STRUCT__entry(
356 		__field(u8, card)
357 		__field(u8, afu)
358 		__field(u16, pe)
359 		__field(u64, cmd)
360 	),
361 
362 	TP_fast_assign(
363 		__entry->card = ctx->afu->adapter->adapter_num;
364 		__entry->afu = ctx->afu->slice;
365 		__entry->pe = ctx->pe;
366 		__entry->cmd = cmd;
367 	),
368 
369 	TP_printk("afu%i.%i pe=%i cmd=%s",
370 		__entry->card,
371 		__entry->afu,
372 		__entry->pe,
373 		__print_symbolic_u64(__entry->cmd, LLCMD_NAMES)
374 	)
375 );
376 
377 TRACE_EVENT(cxl_llcmd_done,
378 	TP_PROTO(struct cxl_context *ctx, u64 cmd, int rc),
379 
380 	TP_ARGS(ctx, cmd, rc),
381 
382 	TP_STRUCT__entry(
383 		__field(u8, card)
384 		__field(u8, afu)
385 		__field(u16, pe)
386 		__field(u64, cmd)
387 		__field(int, rc)
388 	),
389 
390 	TP_fast_assign(
391 		__entry->card = ctx->afu->adapter->adapter_num;
392 		__entry->afu = ctx->afu->slice;
393 		__entry->pe = ctx->pe;
394 		__entry->rc = rc;
395 		__entry->cmd = cmd;
396 	),
397 
398 	TP_printk("afu%i.%i pe=%i cmd=%s rc=%i",
399 		__entry->card,
400 		__entry->afu,
401 		__entry->pe,
402 		__print_symbolic_u64(__entry->cmd, LLCMD_NAMES),
403 		__entry->rc
404 	)
405 );
406 
407 DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl,
408 	TP_PROTO(struct cxl_afu *afu, u64 cmd),
409 
410 	TP_ARGS(afu, cmd),
411 
412 	TP_STRUCT__entry(
413 		__field(u8, card)
414 		__field(u8, afu)
415 		__field(u64, cmd)
416 	),
417 
418 	TP_fast_assign(
419 		__entry->card = afu->adapter->adapter_num;
420 		__entry->afu = afu->slice;
421 		__entry->cmd = cmd;
422 	),
423 
424 	TP_printk("afu%i.%i cmd=%s",
425 		__entry->card,
426 		__entry->afu,
427 		__print_symbolic_u64(__entry->cmd, AFU_COMMANDS)
428 	)
429 );
430 
431 DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl_done,
432 	TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
433 
434 	TP_ARGS(afu, cmd, rc),
435 
436 	TP_STRUCT__entry(
437 		__field(u8, card)
438 		__field(u8, afu)
439 		__field(u64, cmd)
440 		__field(int, rc)
441 	),
442 
443 	TP_fast_assign(
444 		__entry->card = afu->adapter->adapter_num;
445 		__entry->afu = afu->slice;
446 		__entry->rc = rc;
447 		__entry->cmd = cmd;
448 	),
449 
450 	TP_printk("afu%i.%i cmd=%s rc=%i",
451 		__entry->card,
452 		__entry->afu,
453 		__print_symbolic_u64(__entry->cmd, AFU_COMMANDS),
454 		__entry->rc
455 	)
456 );
457 
458 DEFINE_EVENT(cxl_afu_psl_ctrl, cxl_afu_ctrl,
459 	TP_PROTO(struct cxl_afu *afu, u64 cmd),
460 	TP_ARGS(afu, cmd)
461 );
462 
463 DEFINE_EVENT(cxl_afu_psl_ctrl_done, cxl_afu_ctrl_done,
464 	TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
465 	TP_ARGS(afu, cmd, rc)
466 );
467 
468 DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl, cxl_psl_ctrl,
469 	TP_PROTO(struct cxl_afu *afu, u64 cmd),
470 	TP_ARGS(afu, cmd),
471 
472 	TP_printk("psl%i.%i cmd=%s",
473 		__entry->card,
474 		__entry->afu,
475 		__print_symbolic_u64(__entry->cmd, PSL_COMMANDS)
476 	)
477 );
478 
479 DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl_done, cxl_psl_ctrl_done,
480 	TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
481 	TP_ARGS(afu, cmd, rc),
482 
483 	TP_printk("psl%i.%i cmd=%s rc=%i",
484 		__entry->card,
485 		__entry->afu,
486 		__print_symbolic_u64(__entry->cmd, PSL_COMMANDS),
487 		__entry->rc
488 	)
489 );
490 
491 DEFINE_EVENT(cxl_pe_class, cxl_slbia,
492 	TP_PROTO(struct cxl_context *ctx),
493 	TP_ARGS(ctx)
494 );
495 
496 TRACE_EVENT(cxl_hcall,
497 	TP_PROTO(u64 unit_address, u64 process_token, long rc),
498 
499 	TP_ARGS(unit_address, process_token, rc),
500 
501 	TP_STRUCT__entry(
502 		__field(u64, unit_address)
503 		__field(u64, process_token)
504 		__field(long, rc)
505 	),
506 
507 	TP_fast_assign(
508 		__entry->unit_address = unit_address;
509 		__entry->process_token = process_token;
510 		__entry->rc = rc;
511 	),
512 
513 	TP_printk("unit_address=0x%016llx process_token=0x%016llx rc=%li",
514 		__entry->unit_address,
515 		__entry->process_token,
516 		__entry->rc
517 	)
518 );
519 
520 TRACE_EVENT(cxl_hcall_control,
521 	TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
522 	u64 p4, unsigned long r4, long rc),
523 
524 	TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc),
525 
526 	TP_STRUCT__entry(
527 		__field(u64, unit_address)
528 		__field(char *, fct)
529 		__field(u64, p1)
530 		__field(u64, p2)
531 		__field(u64, p3)
532 		__field(u64, p4)
533 		__field(unsigned long, r4)
534 		__field(long, rc)
535 	),
536 
537 	TP_fast_assign(
538 		__entry->unit_address = unit_address;
539 		__entry->fct = fct;
540 		__entry->p1 = p1;
541 		__entry->p2 = p2;
542 		__entry->p3 = p3;
543 		__entry->p4 = p4;
544 		__entry->r4 = r4;
545 		__entry->rc = rc;
546 	),
547 
548 	TP_printk("unit_address=%#.16llx %s(%#llx, %#llx, %#llx, %#llx, R4: %#lx)): %li",
549 		__entry->unit_address,
550 		__entry->fct,
551 		__entry->p1,
552 		__entry->p2,
553 		__entry->p3,
554 		__entry->p4,
555 		__entry->r4,
556 		__entry->rc
557 	)
558 );
559 
560 TRACE_EVENT(cxl_hcall_attach,
561 	TP_PROTO(u64 unit_address, u64 phys_addr, unsigned long process_token,
562 		unsigned long mmio_addr, unsigned long mmio_size, long rc),
563 
564 	TP_ARGS(unit_address, phys_addr, process_token,
565 		mmio_addr, mmio_size, rc),
566 
567 	TP_STRUCT__entry(
568 		__field(u64, unit_address)
569 		__field(u64, phys_addr)
570 		__field(unsigned long, process_token)
571 		__field(unsigned long, mmio_addr)
572 		__field(unsigned long, mmio_size)
573 		__field(long, rc)
574 	),
575 
576 	TP_fast_assign(
577 		__entry->unit_address = unit_address;
578 		__entry->phys_addr = phys_addr;
579 		__entry->process_token = process_token;
580 		__entry->mmio_addr = mmio_addr;
581 		__entry->mmio_size = mmio_size;
582 		__entry->rc = rc;
583 	),
584 
585 	TP_printk("unit_address=0x%016llx phys_addr=0x%016llx "
586 		"token=0x%.8lx mmio_addr=0x%lx mmio_size=0x%lx rc=%li",
587 		__entry->unit_address,
588 		__entry->phys_addr,
589 		__entry->process_token,
590 		__entry->mmio_addr,
591 		__entry->mmio_size,
592 		__entry->rc
593 	)
594 );
595 
596 DEFINE_EVENT(cxl_hcall, cxl_hcall_detach,
597 	TP_PROTO(u64 unit_address, u64 process_token, long rc),
598 	TP_ARGS(unit_address, process_token, rc)
599 );
600 
601 DEFINE_EVENT(cxl_hcall_control, cxl_hcall_control_function,
602 	TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
603 	u64 p4, unsigned long r4, long rc),
604 	TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc)
605 );
606 
607 DEFINE_EVENT(cxl_hcall, cxl_hcall_collect_int_info,
608 	TP_PROTO(u64 unit_address, u64 process_token, long rc),
609 	TP_ARGS(unit_address, process_token, rc)
610 );
611 
612 TRACE_EVENT(cxl_hcall_control_faults,
613 	TP_PROTO(u64 unit_address, u64 process_token,
614 		u64 control_mask, u64 reset_mask, unsigned long r4,
615 		long rc),
616 
617 	TP_ARGS(unit_address, process_token,
618 		control_mask, reset_mask, r4, rc),
619 
620 	TP_STRUCT__entry(
621 		__field(u64, unit_address)
622 		__field(u64, process_token)
623 		__field(u64, control_mask)
624 		__field(u64, reset_mask)
625 		__field(unsigned long, r4)
626 		__field(long, rc)
627 	),
628 
629 	TP_fast_assign(
630 		__entry->unit_address = unit_address;
631 		__entry->process_token = process_token;
632 		__entry->control_mask = control_mask;
633 		__entry->reset_mask = reset_mask;
634 		__entry->r4 = r4;
635 		__entry->rc = rc;
636 	),
637 
638 	TP_printk("unit_address=0x%016llx process_token=0x%llx "
639 		"control_mask=%#llx reset_mask=%#llx r4=%#lx rc=%li",
640 		__entry->unit_address,
641 		__entry->process_token,
642 		__entry->control_mask,
643 		__entry->reset_mask,
644 		__entry->r4,
645 		__entry->rc
646 	)
647 );
648 
649 DEFINE_EVENT(cxl_hcall_control, cxl_hcall_control_facility,
650 	TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
651 	u64 p4, unsigned long r4, long rc),
652 	TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc)
653 );
654 
655 TRACE_EVENT(cxl_hcall_download_facility,
656 	TP_PROTO(u64 unit_address, char *fct, u64 list_address, u64 num,
657 	unsigned long r4, long rc),
658 
659 	TP_ARGS(unit_address, fct, list_address, num, r4, rc),
660 
661 	TP_STRUCT__entry(
662 		__field(u64, unit_address)
663 		__field(char *, fct)
664 		__field(u64, list_address)
665 		__field(u64, num)
666 		__field(unsigned long, r4)
667 		__field(long, rc)
668 	),
669 
670 	TP_fast_assign(
671 		__entry->unit_address = unit_address;
672 		__entry->fct = fct;
673 		__entry->list_address = list_address;
674 		__entry->num = num;
675 		__entry->r4 = r4;
676 		__entry->rc = rc;
677 	),
678 
679 	TP_printk("%#.16llx, %s(%#llx, %#llx), %#lx): %li",
680 		__entry->unit_address,
681 		__entry->fct,
682 		__entry->list_address,
683 		__entry->num,
684 		__entry->r4,
685 		__entry->rc
686 	)
687 );
688 
689 #endif /* _CXL_TRACE_H */
690 
691 /* This part must be outside protection */
692 #undef TRACE_INCLUDE_PATH
693 #define TRACE_INCLUDE_PATH .
694 #define TRACE_INCLUDE_FILE trace
695 #include <trace/define_trace.h>
696