cm_trace.h 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Trace point definitions for the RDMA Connect Manager.
  4. *
  5. * Author: Chuck Lever <chuck.lever@oracle.com>
  6. *
  7. * Copyright (c) 2020 Oracle and/or its affiliates.
  8. */
  9. #undef TRACE_SYSTEM
  10. #define TRACE_SYSTEM ib_cma
  11. #if !defined(_TRACE_IB_CMA_H) || defined(TRACE_HEADER_MULTI_READ)
  12. #define _TRACE_IB_CMA_H
  13. #include <linux/tracepoint.h>
  14. #include <rdma/ib_cm.h>
  15. #include <trace/events/rdma.h>
  16. /*
  17. * enum ib_cm_state, from include/rdma/ib_cm.h
  18. */
  19. #define IB_CM_STATE_LIST \
  20. ib_cm_state(IDLE) \
  21. ib_cm_state(LISTEN) \
  22. ib_cm_state(REQ_SENT) \
  23. ib_cm_state(REQ_RCVD) \
  24. ib_cm_state(MRA_REQ_SENT) \
  25. ib_cm_state(MRA_REQ_RCVD) \
  26. ib_cm_state(REP_SENT) \
  27. ib_cm_state(REP_RCVD) \
  28. ib_cm_state(MRA_REP_SENT) \
  29. ib_cm_state(MRA_REP_RCVD) \
  30. ib_cm_state(ESTABLISHED) \
  31. ib_cm_state(DREQ_SENT) \
  32. ib_cm_state(DREQ_RCVD) \
  33. ib_cm_state(TIMEWAIT) \
  34. ib_cm_state(SIDR_REQ_SENT) \
  35. ib_cm_state_end(SIDR_REQ_RCVD)
  36. #undef ib_cm_state
  37. #undef ib_cm_state_end
  38. #define ib_cm_state(x) TRACE_DEFINE_ENUM(IB_CM_##x);
  39. #define ib_cm_state_end(x) TRACE_DEFINE_ENUM(IB_CM_##x);
  40. IB_CM_STATE_LIST
  41. #undef ib_cm_state
  42. #undef ib_cm_state_end
  43. #define ib_cm_state(x) { IB_CM_##x, #x },
  44. #define ib_cm_state_end(x) { IB_CM_##x, #x }
  45. #define show_ib_cm_state(x) \
  46. __print_symbolic(x, IB_CM_STATE_LIST)
  47. /*
  48. * enum ib_cm_lap_state, from include/rdma/ib_cm.h
  49. */
  50. #define IB_CM_LAP_STATE_LIST \
  51. ib_cm_lap_state(LAP_UNINIT) \
  52. ib_cm_lap_state(LAP_IDLE) \
  53. ib_cm_lap_state(LAP_SENT) \
  54. ib_cm_lap_state(LAP_RCVD) \
  55. ib_cm_lap_state(MRA_LAP_SENT) \
  56. ib_cm_lap_state_end(MRA_LAP_RCVD)
  57. #undef ib_cm_lap_state
  58. #undef ib_cm_lap_state_end
  59. #define ib_cm_lap_state(x) TRACE_DEFINE_ENUM(IB_CM_##x);
  60. #define ib_cm_lap_state_end(x) TRACE_DEFINE_ENUM(IB_CM_##x);
  61. IB_CM_LAP_STATE_LIST
  62. #undef ib_cm_lap_state
  63. #undef ib_cm_lap_state_end
  64. #define ib_cm_lap_state(x) { IB_CM_##x, #x },
  65. #define ib_cm_lap_state_end(x) { IB_CM_##x, #x }
  66. #define show_ib_cm_lap_state(x) \
  67. __print_symbolic(x, IB_CM_LAP_STATE_LIST)
  68. /*
  69. * enum ib_cm_rej_reason, from include/rdma/ib_cm.h
  70. */
  71. #define IB_CM_REJ_REASON_LIST \
  72. ib_cm_rej_reason(REJ_NO_QP) \
  73. ib_cm_rej_reason(REJ_NO_EEC) \
  74. ib_cm_rej_reason(REJ_NO_RESOURCES) \
  75. ib_cm_rej_reason(REJ_TIMEOUT) \
  76. ib_cm_rej_reason(REJ_UNSUPPORTED) \
  77. ib_cm_rej_reason(REJ_INVALID_COMM_ID) \
  78. ib_cm_rej_reason(REJ_INVALID_COMM_INSTANCE) \
  79. ib_cm_rej_reason(REJ_INVALID_SERVICE_ID) \
  80. ib_cm_rej_reason(REJ_INVALID_TRANSPORT_TYPE) \
  81. ib_cm_rej_reason(REJ_STALE_CONN) \
  82. ib_cm_rej_reason(REJ_RDC_NOT_EXIST) \
  83. ib_cm_rej_reason(REJ_INVALID_GID) \
  84. ib_cm_rej_reason(REJ_INVALID_LID) \
  85. ib_cm_rej_reason(REJ_INVALID_SL) \
  86. ib_cm_rej_reason(REJ_INVALID_TRAFFIC_CLASS) \
  87. ib_cm_rej_reason(REJ_INVALID_HOP_LIMIT) \
  88. ib_cm_rej_reason(REJ_INVALID_PACKET_RATE) \
  89. ib_cm_rej_reason(REJ_INVALID_ALT_GID) \
  90. ib_cm_rej_reason(REJ_INVALID_ALT_LID) \
  91. ib_cm_rej_reason(REJ_INVALID_ALT_SL) \
  92. ib_cm_rej_reason(REJ_INVALID_ALT_TRAFFIC_CLASS) \
  93. ib_cm_rej_reason(REJ_INVALID_ALT_HOP_LIMIT) \
  94. ib_cm_rej_reason(REJ_INVALID_ALT_PACKET_RATE) \
  95. ib_cm_rej_reason(REJ_PORT_CM_REDIRECT) \
  96. ib_cm_rej_reason(REJ_PORT_REDIRECT) \
  97. ib_cm_rej_reason(REJ_INVALID_MTU) \
  98. ib_cm_rej_reason(REJ_INSUFFICIENT_RESP_RESOURCES) \
  99. ib_cm_rej_reason(REJ_CONSUMER_DEFINED) \
  100. ib_cm_rej_reason(REJ_INVALID_RNR_RETRY) \
  101. ib_cm_rej_reason(REJ_DUPLICATE_LOCAL_COMM_ID) \
  102. ib_cm_rej_reason(REJ_INVALID_CLASS_VERSION) \
  103. ib_cm_rej_reason(REJ_INVALID_FLOW_LABEL) \
  104. ib_cm_rej_reason(REJ_INVALID_ALT_FLOW_LABEL) \
  105. ib_cm_rej_reason_end(REJ_VENDOR_OPTION_NOT_SUPPORTED)
  106. #undef ib_cm_rej_reason
  107. #undef ib_cm_rej_reason_end
  108. #define ib_cm_rej_reason(x) TRACE_DEFINE_ENUM(IB_CM_##x);
  109. #define ib_cm_rej_reason_end(x) TRACE_DEFINE_ENUM(IB_CM_##x);
  110. IB_CM_REJ_REASON_LIST
  111. #undef ib_cm_rej_reason
  112. #undef ib_cm_rej_reason_end
  113. #define ib_cm_rej_reason(x) { IB_CM_##x, #x },
  114. #define ib_cm_rej_reason_end(x) { IB_CM_##x, #x }
  115. #define show_ib_cm_rej_reason(x) \
  116. __print_symbolic(x, IB_CM_REJ_REASON_LIST)
  117. DECLARE_EVENT_CLASS(icm_id_class,
  118. TP_PROTO(
  119. const struct ib_cm_id *cm_id
  120. ),
  121. TP_ARGS(cm_id),
  122. TP_STRUCT__entry(
  123. __field(const void *, cm_id) /* for eBPF scripts */
  124. __field(unsigned int, local_id)
  125. __field(unsigned int, remote_id)
  126. __field(unsigned long, state)
  127. __field(unsigned long, lap_state)
  128. ),
  129. TP_fast_assign(
  130. __entry->cm_id = cm_id;
  131. __entry->local_id = be32_to_cpu(cm_id->local_id);
  132. __entry->remote_id = be32_to_cpu(cm_id->remote_id);
  133. __entry->state = cm_id->state;
  134. __entry->lap_state = cm_id->lap_state;
  135. ),
  136. TP_printk("local_id=%u remote_id=%u state=%s lap_state=%s",
  137. __entry->local_id, __entry->remote_id,
  138. show_ib_cm_state(__entry->state),
  139. show_ib_cm_lap_state(__entry->lap_state)
  140. )
  141. );
  142. #define DEFINE_CM_SEND_EVENT(name) \
  143. DEFINE_EVENT(icm_id_class, \
  144. icm_send_##name, \
  145. TP_PROTO( \
  146. const struct ib_cm_id *cm_id \
  147. ), \
  148. TP_ARGS(cm_id))
  149. DEFINE_CM_SEND_EVENT(req);
  150. DEFINE_CM_SEND_EVENT(rep);
  151. DEFINE_CM_SEND_EVENT(dup_req);
  152. DEFINE_CM_SEND_EVENT(dup_rep);
  153. DEFINE_CM_SEND_EVENT(rtu);
  154. DEFINE_CM_SEND_EVENT(mra);
  155. DEFINE_CM_SEND_EVENT(sidr_req);
  156. DEFINE_CM_SEND_EVENT(sidr_rep);
  157. DEFINE_CM_SEND_EVENT(dreq);
  158. DEFINE_CM_SEND_EVENT(drep);
  159. TRACE_EVENT(icm_send_rej,
  160. TP_PROTO(
  161. const struct ib_cm_id *cm_id,
  162. enum ib_cm_rej_reason reason
  163. ),
  164. TP_ARGS(cm_id, reason),
  165. TP_STRUCT__entry(
  166. __field(const void *, cm_id)
  167. __field(u32, local_id)
  168. __field(u32, remote_id)
  169. __field(unsigned long, state)
  170. __field(unsigned long, reason)
  171. ),
  172. TP_fast_assign(
  173. __entry->cm_id = cm_id;
  174. __entry->local_id = be32_to_cpu(cm_id->local_id);
  175. __entry->remote_id = be32_to_cpu(cm_id->remote_id);
  176. __entry->state = cm_id->state;
  177. __entry->reason = reason;
  178. ),
  179. TP_printk("local_id=%u remote_id=%u state=%s reason=%s",
  180. __entry->local_id, __entry->remote_id,
  181. show_ib_cm_state(__entry->state),
  182. show_ib_cm_rej_reason(__entry->reason)
  183. )
  184. );
  185. #define DEFINE_CM_ERR_EVENT(name) \
  186. DEFINE_EVENT(icm_id_class, \
  187. icm_##name##_err, \
  188. TP_PROTO( \
  189. const struct ib_cm_id *cm_id \
  190. ), \
  191. TP_ARGS(cm_id))
  192. DEFINE_CM_ERR_EVENT(send_cm_rtu);
  193. DEFINE_CM_ERR_EVENT(establish);
  194. DEFINE_CM_ERR_EVENT(no_listener);
  195. DEFINE_CM_ERR_EVENT(send_drep);
  196. DEFINE_CM_ERR_EVENT(dreq_unknown);
  197. DEFINE_CM_ERR_EVENT(send_unknown_rej);
  198. DEFINE_CM_ERR_EVENT(rej_unknown);
  199. DEFINE_CM_ERR_EVENT(send_mra_unknown);
  200. DEFINE_CM_ERR_EVENT(mra_unknown);
  201. DEFINE_CM_ERR_EVENT(qp_init);
  202. DEFINE_CM_ERR_EVENT(qp_rtr);
  203. DEFINE_CM_ERR_EVENT(qp_rts);
  204. DEFINE_EVENT(icm_id_class, \
  205. icm_dreq_skipped, \
  206. TP_PROTO( \
  207. const struct ib_cm_id *cm_id \
  208. ), \
  209. TP_ARGS(cm_id) \
  210. );
  211. DECLARE_EVENT_CLASS(icm_local_class,
  212. TP_PROTO(
  213. unsigned int local_id,
  214. unsigned int remote_id
  215. ),
  216. TP_ARGS(local_id, remote_id),
  217. TP_STRUCT__entry(
  218. __field(unsigned int, local_id)
  219. __field(unsigned int, remote_id)
  220. ),
  221. TP_fast_assign(
  222. __entry->local_id = local_id;
  223. __entry->remote_id = remote_id;
  224. ),
  225. TP_printk("local_id=%u remote_id=%u",
  226. __entry->local_id, __entry->remote_id
  227. )
  228. );
  229. #define DEFINE_CM_LOCAL_EVENT(name) \
  230. DEFINE_EVENT(icm_local_class, \
  231. icm_##name, \
  232. TP_PROTO( \
  233. unsigned int local_id, \
  234. unsigned int remote_id \
  235. ), \
  236. TP_ARGS(local_id, remote_id))
  237. DEFINE_CM_LOCAL_EVENT(issue_rej);
  238. DEFINE_CM_LOCAL_EVENT(issue_drep);
  239. DEFINE_CM_LOCAL_EVENT(staleconn_err);
  240. DEFINE_CM_LOCAL_EVENT(no_priv_err);
  241. DECLARE_EVENT_CLASS(icm_remote_class,
  242. TP_PROTO(
  243. u32 remote_id
  244. ),
  245. TP_ARGS(remote_id),
  246. TP_STRUCT__entry(
  247. __field(u32, remote_id)
  248. ),
  249. TP_fast_assign(
  250. __entry->remote_id = remote_id;
  251. ),
  252. TP_printk("remote_id=%u",
  253. __entry->remote_id
  254. )
  255. );
  256. #define DEFINE_CM_REMOTE_EVENT(name) \
  257. DEFINE_EVENT(icm_remote_class, \
  258. icm_##name, \
  259. TP_PROTO( \
  260. u32 remote_id \
  261. ), \
  262. TP_ARGS(remote_id))
  263. DEFINE_CM_REMOTE_EVENT(remote_no_priv_err);
  264. DEFINE_CM_REMOTE_EVENT(insert_failed_err);
  265. TRACE_EVENT(icm_send_rep_err,
  266. TP_PROTO(
  267. __be32 local_id,
  268. enum ib_cm_state state
  269. ),
  270. TP_ARGS(local_id, state),
  271. TP_STRUCT__entry(
  272. __field(unsigned int, local_id)
  273. __field(unsigned long, state)
  274. ),
  275. TP_fast_assign(
  276. __entry->local_id = be32_to_cpu(local_id);
  277. __entry->state = state;
  278. ),
  279. TP_printk("local_id=%u state=%s",
  280. __entry->local_id, show_ib_cm_state(__entry->state)
  281. )
  282. );
  283. TRACE_EVENT(icm_rep_unknown_err,
  284. TP_PROTO(
  285. unsigned int local_id,
  286. unsigned int remote_id,
  287. enum ib_cm_state state
  288. ),
  289. TP_ARGS(local_id, remote_id, state),
  290. TP_STRUCT__entry(
  291. __field(unsigned int, local_id)
  292. __field(unsigned int, remote_id)
  293. __field(unsigned long, state)
  294. ),
  295. TP_fast_assign(
  296. __entry->local_id = local_id;
  297. __entry->remote_id = remote_id;
  298. __entry->state = state;
  299. ),
  300. TP_printk("local_id=%u remote_id=%u state=%s",
  301. __entry->local_id, __entry->remote_id,
  302. show_ib_cm_state(__entry->state)
  303. )
  304. );
  305. TRACE_EVENT(icm_handler_err,
  306. TP_PROTO(
  307. enum ib_cm_event_type event
  308. ),
  309. TP_ARGS(event),
  310. TP_STRUCT__entry(
  311. __field(unsigned long, event)
  312. ),
  313. TP_fast_assign(
  314. __entry->event = event;
  315. ),
  316. TP_printk("unhandled event=%s",
  317. rdma_show_ib_cm_event(__entry->event)
  318. )
  319. );
  320. TRACE_EVENT(icm_mad_send_err,
  321. TP_PROTO(
  322. enum ib_cm_state state,
  323. enum ib_wc_status wc_status
  324. ),
  325. TP_ARGS(state, wc_status),
  326. TP_STRUCT__entry(
  327. __field(unsigned long, state)
  328. __field(unsigned long, wc_status)
  329. ),
  330. TP_fast_assign(
  331. __entry->state = state;
  332. __entry->wc_status = wc_status;
  333. ),
  334. TP_printk("state=%s completion status=%s",
  335. show_ib_cm_state(__entry->state),
  336. rdma_show_wc_status(__entry->wc_status)
  337. )
  338. );
  339. #endif /* _TRACE_IB_CMA_H */
  340. #undef TRACE_INCLUDE_PATH
  341. #define TRACE_INCLUDE_PATH ../../drivers/infiniband/core
  342. #define TRACE_INCLUDE_FILE cm_trace
  343. #include <trace/define_trace.h>