trace.h 14 KB

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