ib_mad.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
  2. /*
  3. * Copyright (c) 2018 Intel Corporation. All rights reserved.
  4. */
  5. #undef TRACE_SYSTEM
  6. #define TRACE_SYSTEM ib_mad
  7. #if !defined(_TRACE_IB_MAD_H) || defined(TRACE_HEADER_MULTI_READ)
  8. #define _TRACE_IB_MAD_H
  9. #include <linux/tracepoint.h>
  10. #include <rdma/ib_mad.h>
  11. #ifdef CONFIG_TRACEPOINTS
  12. struct trace_event_raw_ib_mad_send_template;
  13. static void create_mad_addr_info(struct ib_mad_send_wr_private *mad_send_wr,
  14. struct ib_mad_qp_info *qp_info,
  15. struct trace_event_raw_ib_mad_send_template *entry);
  16. #endif
  17. DECLARE_EVENT_CLASS(ib_mad_send_template,
  18. TP_PROTO(struct ib_mad_send_wr_private *wr,
  19. struct ib_mad_qp_info *qp_info),
  20. TP_ARGS(wr, qp_info),
  21. TP_STRUCT__entry(
  22. __field(u8, base_version)
  23. __field(u8, mgmt_class)
  24. __field(u8, class_version)
  25. __field(u8, port_num)
  26. __field(u32, qp_num)
  27. __field(u8, method)
  28. __field(u8, sl)
  29. __field(u16, attr_id)
  30. __field(u32, attr_mod)
  31. __field(u64, wrtid)
  32. __field(u64, tid)
  33. __field(u16, status)
  34. __field(u16, class_specific)
  35. __field(u32, length)
  36. __field(u32, dlid)
  37. __field(u32, rqpn)
  38. __field(u32, rqkey)
  39. __field(u32, dev_index)
  40. __field(void *, agent_priv)
  41. __field(unsigned long, timeout)
  42. __field(int, retries_left)
  43. __field(int, max_retries)
  44. __field(int, retry)
  45. ),
  46. TP_fast_assign(
  47. __entry->dev_index = wr->mad_agent_priv->agent.device->index;
  48. __entry->port_num = wr->mad_agent_priv->agent.port_num;
  49. __entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
  50. __entry->agent_priv = wr->mad_agent_priv;
  51. __entry->wrtid = wr->tid;
  52. __entry->max_retries = wr->max_retries;
  53. __entry->retries_left = wr->retries_left;
  54. __entry->retry = wr->retry;
  55. __entry->timeout = wr->timeout;
  56. __entry->length = wr->send_buf.hdr_len +
  57. wr->send_buf.data_len;
  58. __entry->base_version =
  59. ((struct ib_mad_hdr *)wr->send_buf.mad)->base_version;
  60. __entry->mgmt_class =
  61. ((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class;
  62. __entry->class_version =
  63. ((struct ib_mad_hdr *)wr->send_buf.mad)->class_version;
  64. __entry->method =
  65. ((struct ib_mad_hdr *)wr->send_buf.mad)->method;
  66. __entry->status =
  67. ((struct ib_mad_hdr *)wr->send_buf.mad)->status;
  68. __entry->class_specific =
  69. ((struct ib_mad_hdr *)wr->send_buf.mad)->class_specific;
  70. __entry->tid = ((struct ib_mad_hdr *)wr->send_buf.mad)->tid;
  71. __entry->attr_id =
  72. ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_id;
  73. __entry->attr_mod =
  74. ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_mod;
  75. create_mad_addr_info(wr, qp_info, __entry);
  76. ),
  77. TP_printk("%d:%d QP%d agent %p: " \
  78. "wrtid 0x%llx; %d/%d retries(%d); timeout %lu length %d : " \
  79. "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \
  80. "method 0x%x status 0x%x class_specific 0x%x tid 0x%llx " \
  81. "attr_id 0x%x attr_mod 0x%x => dlid 0x%08x sl %d "\
  82. "rpqn 0x%x rqpkey 0x%x",
  83. __entry->dev_index, __entry->port_num, __entry->qp_num,
  84. __entry->agent_priv, be64_to_cpu(__entry->wrtid),
  85. __entry->retries_left, __entry->max_retries,
  86. __entry->retry, __entry->timeout, __entry->length,
  87. __entry->base_version, __entry->mgmt_class,
  88. __entry->class_version,
  89. __entry->method, be16_to_cpu(__entry->status),
  90. be16_to_cpu(__entry->class_specific),
  91. be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id),
  92. be32_to_cpu(__entry->attr_mod),
  93. be32_to_cpu(__entry->dlid), __entry->sl,
  94. __entry->rqpn, __entry->rqkey
  95. )
  96. );
  97. DEFINE_EVENT(ib_mad_send_template, ib_mad_error_handler,
  98. TP_PROTO(struct ib_mad_send_wr_private *wr,
  99. struct ib_mad_qp_info *qp_info),
  100. TP_ARGS(wr, qp_info));
  101. DEFINE_EVENT(ib_mad_send_template, ib_mad_ib_send_mad,
  102. TP_PROTO(struct ib_mad_send_wr_private *wr,
  103. struct ib_mad_qp_info *qp_info),
  104. TP_ARGS(wr, qp_info));
  105. DEFINE_EVENT(ib_mad_send_template, ib_mad_send_done_resend,
  106. TP_PROTO(struct ib_mad_send_wr_private *wr,
  107. struct ib_mad_qp_info *qp_info),
  108. TP_ARGS(wr, qp_info));
  109. TRACE_EVENT(ib_mad_send_done_handler,
  110. TP_PROTO(struct ib_mad_send_wr_private *wr, struct ib_wc *wc),
  111. TP_ARGS(wr, wc),
  112. TP_STRUCT__entry(
  113. __field(u8, port_num)
  114. __field(u8, base_version)
  115. __field(u8, mgmt_class)
  116. __field(u8, class_version)
  117. __field(u32, qp_num)
  118. __field(u64, wrtid)
  119. __field(u16, status)
  120. __field(u16, wc_status)
  121. __field(u32, length)
  122. __field(void *, agent_priv)
  123. __field(unsigned long, timeout)
  124. __field(u32, dev_index)
  125. __field(int, retries_left)
  126. __field(int, max_retries)
  127. __field(int, retry)
  128. __field(u8, method)
  129. ),
  130. TP_fast_assign(
  131. __entry->dev_index = wr->mad_agent_priv->agent.device->index;
  132. __entry->port_num = wr->mad_agent_priv->agent.port_num;
  133. __entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
  134. __entry->agent_priv = wr->mad_agent_priv;
  135. __entry->wrtid = wr->tid;
  136. __entry->max_retries = wr->max_retries;
  137. __entry->retries_left = wr->retries_left;
  138. __entry->retry = wr->retry;
  139. __entry->timeout = wr->timeout;
  140. __entry->base_version =
  141. ((struct ib_mad_hdr *)wr->send_buf.mad)->base_version;
  142. __entry->mgmt_class =
  143. ((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class;
  144. __entry->class_version =
  145. ((struct ib_mad_hdr *)wr->send_buf.mad)->class_version;
  146. __entry->method =
  147. ((struct ib_mad_hdr *)wr->send_buf.mad)->method;
  148. __entry->status =
  149. ((struct ib_mad_hdr *)wr->send_buf.mad)->status;
  150. __entry->wc_status = wc->status;
  151. __entry->length = wc->byte_len;
  152. ),
  153. TP_printk("%d:%d QP%d : SEND WC Status %d : agent %p: " \
  154. "wrtid 0x%llx %d/%d retries(%d) timeout %lu length %d: " \
  155. "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \
  156. "method 0x%x status 0x%x",
  157. __entry->dev_index, __entry->port_num, __entry->qp_num,
  158. __entry->wc_status,
  159. __entry->agent_priv, be64_to_cpu(__entry->wrtid),
  160. __entry->retries_left, __entry->max_retries,
  161. __entry->retry, __entry->timeout,
  162. __entry->length,
  163. __entry->base_version, __entry->mgmt_class,
  164. __entry->class_version, __entry->method,
  165. be16_to_cpu(__entry->status)
  166. )
  167. );
  168. TRACE_EVENT(ib_mad_recv_done_handler,
  169. TP_PROTO(struct ib_mad_qp_info *qp_info, struct ib_wc *wc,
  170. struct ib_mad_hdr *mad_hdr),
  171. TP_ARGS(qp_info, wc, mad_hdr),
  172. TP_STRUCT__entry(
  173. __field(u8, base_version)
  174. __field(u8, mgmt_class)
  175. __field(u8, class_version)
  176. __field(u8, port_num)
  177. __field(u32, qp_num)
  178. __field(u16, status)
  179. __field(u16, class_specific)
  180. __field(u32, length)
  181. __field(u64, tid)
  182. __field(u8, method)
  183. __field(u8, sl)
  184. __field(u16, attr_id)
  185. __field(u32, attr_mod)
  186. __field(u16, src_qp)
  187. __field(u16, wc_status)
  188. __field(u32, slid)
  189. __field(u32, dev_index)
  190. ),
  191. TP_fast_assign(
  192. __entry->dev_index = qp_info->port_priv->device->index;
  193. __entry->port_num = qp_info->port_priv->port_num;
  194. __entry->qp_num = qp_info->qp->qp_num;
  195. __entry->length = wc->byte_len;
  196. __entry->base_version = mad_hdr->base_version;
  197. __entry->mgmt_class = mad_hdr->mgmt_class;
  198. __entry->class_version = mad_hdr->class_version;
  199. __entry->method = mad_hdr->method;
  200. __entry->status = mad_hdr->status;
  201. __entry->class_specific = mad_hdr->class_specific;
  202. __entry->tid = mad_hdr->tid;
  203. __entry->attr_id = mad_hdr->attr_id;
  204. __entry->attr_mod = mad_hdr->attr_mod;
  205. __entry->slid = wc->slid;
  206. __entry->src_qp = wc->src_qp;
  207. __entry->sl = wc->sl;
  208. __entry->wc_status = wc->status;
  209. ),
  210. TP_printk("%d:%d QP%d : RECV WC Status %d : length %d : hdr : " \
  211. "base_ver 0x%02x class 0x%02x class_ver 0x%02x " \
  212. "method 0x%02x status 0x%04x class_specific 0x%04x " \
  213. "tid 0x%016llx attr_id 0x%04x attr_mod 0x%08x " \
  214. "slid 0x%08x src QP%d, sl %d",
  215. __entry->dev_index, __entry->port_num, __entry->qp_num,
  216. __entry->wc_status,
  217. __entry->length,
  218. __entry->base_version, __entry->mgmt_class,
  219. __entry->class_version, __entry->method,
  220. be16_to_cpu(__entry->status),
  221. be16_to_cpu(__entry->class_specific),
  222. be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id),
  223. be32_to_cpu(__entry->attr_mod),
  224. __entry->slid, __entry->src_qp, __entry->sl
  225. )
  226. );
  227. DECLARE_EVENT_CLASS(ib_mad_agent_template,
  228. TP_PROTO(struct ib_mad_agent_private *agent),
  229. TP_ARGS(agent),
  230. TP_STRUCT__entry(
  231. __field(u32, dev_index)
  232. __field(u32, hi_tid)
  233. __field(u8, port_num)
  234. __field(u8, mgmt_class)
  235. __field(u8, mgmt_class_version)
  236. ),
  237. TP_fast_assign(
  238. __entry->dev_index = agent->agent.device->index;
  239. __entry->port_num = agent->agent.port_num;
  240. __entry->hi_tid = agent->agent.hi_tid;
  241. if (agent->reg_req) {
  242. __entry->mgmt_class = agent->reg_req->mgmt_class;
  243. __entry->mgmt_class_version =
  244. agent->reg_req->mgmt_class_version;
  245. } else {
  246. __entry->mgmt_class = 0;
  247. __entry->mgmt_class_version = 0;
  248. }
  249. ),
  250. TP_printk("%d:%d mad agent : hi_tid 0x%08x class 0x%02x class_ver 0x%02x",
  251. __entry->dev_index, __entry->port_num,
  252. __entry->hi_tid, __entry->mgmt_class,
  253. __entry->mgmt_class_version
  254. )
  255. );
  256. DEFINE_EVENT(ib_mad_agent_template, ib_mad_recv_done_agent,
  257. TP_PROTO(struct ib_mad_agent_private *agent),
  258. TP_ARGS(agent));
  259. DEFINE_EVENT(ib_mad_agent_template, ib_mad_send_done_agent,
  260. TP_PROTO(struct ib_mad_agent_private *agent),
  261. TP_ARGS(agent));
  262. DEFINE_EVENT(ib_mad_agent_template, ib_mad_create_agent,
  263. TP_PROTO(struct ib_mad_agent_private *agent),
  264. TP_ARGS(agent));
  265. DEFINE_EVENT(ib_mad_agent_template, ib_mad_unregister_agent,
  266. TP_PROTO(struct ib_mad_agent_private *agent),
  267. TP_ARGS(agent));
  268. DECLARE_EVENT_CLASS(ib_mad_opa_smi_template,
  269. TP_PROTO(struct opa_smp *smp),
  270. TP_ARGS(smp),
  271. TP_STRUCT__entry(
  272. __field(u64, mkey)
  273. __field(u32, dr_slid)
  274. __field(u32, dr_dlid)
  275. __field(u8, hop_ptr)
  276. __field(u8, hop_cnt)
  277. __array(u8, initial_path, OPA_SMP_MAX_PATH_HOPS)
  278. __array(u8, return_path, OPA_SMP_MAX_PATH_HOPS)
  279. ),
  280. TP_fast_assign(
  281. __entry->hop_ptr = smp->hop_ptr;
  282. __entry->hop_cnt = smp->hop_cnt;
  283. __entry->mkey = smp->mkey;
  284. __entry->dr_slid = smp->route.dr.dr_slid;
  285. __entry->dr_dlid = smp->route.dr.dr_dlid;
  286. memcpy(__entry->initial_path, smp->route.dr.initial_path,
  287. OPA_SMP_MAX_PATH_HOPS);
  288. memcpy(__entry->return_path, smp->route.dr.return_path,
  289. OPA_SMP_MAX_PATH_HOPS);
  290. ),
  291. TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \
  292. "mkey 0x%016llx dr_slid 0x%08x dr_dlid 0x%08x " \
  293. "initial_path %*ph return_path %*ph ",
  294. __entry->hop_ptr, __entry->hop_cnt,
  295. be64_to_cpu(__entry->mkey), be32_to_cpu(__entry->dr_slid),
  296. be32_to_cpu(__entry->dr_dlid),
  297. OPA_SMP_MAX_PATH_HOPS, __entry->initial_path,
  298. OPA_SMP_MAX_PATH_HOPS, __entry->return_path
  299. )
  300. );
  301. DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_opa_smi,
  302. TP_PROTO(struct opa_smp *smp),
  303. TP_ARGS(smp));
  304. DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_out_opa_smi,
  305. TP_PROTO(struct opa_smp *smp),
  306. TP_ARGS(smp));
  307. DECLARE_EVENT_CLASS(ib_mad_opa_ib_template,
  308. TP_PROTO(struct ib_smp *smp),
  309. TP_ARGS(smp),
  310. TP_STRUCT__entry(
  311. __field(u64, mkey)
  312. __field(u32, dr_slid)
  313. __field(u32, dr_dlid)
  314. __field(u8, hop_ptr)
  315. __field(u8, hop_cnt)
  316. __array(u8, initial_path, IB_SMP_MAX_PATH_HOPS)
  317. __array(u8, return_path, IB_SMP_MAX_PATH_HOPS)
  318. ),
  319. TP_fast_assign(
  320. __entry->hop_ptr = smp->hop_ptr;
  321. __entry->hop_cnt = smp->hop_cnt;
  322. __entry->mkey = smp->mkey;
  323. __entry->dr_slid = smp->dr_slid;
  324. __entry->dr_dlid = smp->dr_dlid;
  325. memcpy(__entry->initial_path, smp->initial_path,
  326. IB_SMP_MAX_PATH_HOPS);
  327. memcpy(__entry->return_path, smp->return_path,
  328. IB_SMP_MAX_PATH_HOPS);
  329. ),
  330. TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \
  331. "mkey 0x%016llx dr_slid 0x%04x dr_dlid 0x%04x " \
  332. "initial_path %*ph return_path %*ph ",
  333. __entry->hop_ptr, __entry->hop_cnt,
  334. be64_to_cpu(__entry->mkey), be16_to_cpu(__entry->dr_slid),
  335. be16_to_cpu(__entry->dr_dlid),
  336. IB_SMP_MAX_PATH_HOPS, __entry->initial_path,
  337. IB_SMP_MAX_PATH_HOPS, __entry->return_path
  338. )
  339. );
  340. DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_ib_smi,
  341. TP_PROTO(struct ib_smp *smp),
  342. TP_ARGS(smp));
  343. DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_out_ib_smi,
  344. TP_PROTO(struct ib_smp *smp),
  345. TP_ARGS(smp));
  346. #endif /* _TRACE_IB_MAD_H */
  347. #include <trace/define_trace.h>