trace_cm.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. /* SPDX-License-Identifier: GPL-2.0 or Linux-OpenIB */
  2. /* Copyright (c) 2019 - 2021 Intel Corporation */
  3. #if !defined(__TRACE_CM_H) || defined(TRACE_HEADER_MULTI_READ)
  4. #define __TRACE_CM_H
  5. #include <linux/tracepoint.h>
  6. #include <linux/trace_seq.h>
  7. #include "main.h"
  8. const char *print_ip_addr(struct trace_seq *p, u32 *addr, u16 port, bool ivp4);
  9. const char *parse_iw_event_type(enum iw_cm_event_type iw_type);
  10. const char *parse_cm_event_type(enum irdma_cm_event_type cm_type);
  11. const char *parse_cm_state(enum irdma_cm_node_state);
  12. #define __print_ip_addr(addr, port, ipv4) print_ip_addr(p, addr, port, ipv4)
  13. #undef TRACE_SYSTEM
  14. #define TRACE_SYSTEM irdma_cm
  15. TRACE_EVENT(irdma_create_listen,
  16. TP_PROTO(struct irdma_device *iwdev, struct irdma_cm_info *cm_info),
  17. TP_ARGS(iwdev, cm_info),
  18. TP_STRUCT__entry(__field(struct irdma_device *, iwdev)
  19. __dynamic_array(u32, laddr, 4)
  20. __field(u16, lport)
  21. __field(bool, ipv4)
  22. ),
  23. TP_fast_assign(__entry->iwdev = iwdev;
  24. __entry->lport = cm_info->loc_port;
  25. __entry->ipv4 = cm_info->ipv4;
  26. memcpy(__get_dynamic_array(laddr),
  27. cm_info->loc_addr, 4);
  28. ),
  29. TP_printk("iwdev=%p loc: %s",
  30. __entry->iwdev,
  31. __print_ip_addr(__get_dynamic_array(laddr),
  32. __entry->lport, __entry->ipv4)
  33. )
  34. );
  35. TRACE_EVENT(irdma_dec_refcnt_listen,
  36. TP_PROTO(struct irdma_cm_listener *listener, void *caller),
  37. TP_ARGS(listener, caller),
  38. TP_STRUCT__entry(__field(struct irdma_device *, iwdev)
  39. __field(u32, refcnt)
  40. __dynamic_array(u32, laddr, 4)
  41. __field(u16, lport)
  42. __field(bool, ipv4)
  43. __field(void *, caller)
  44. ),
  45. TP_fast_assign(__entry->iwdev = listener->iwdev;
  46. __entry->lport = listener->loc_port;
  47. __entry->ipv4 = listener->ipv4;
  48. memcpy(__get_dynamic_array(laddr),
  49. listener->loc_addr, 4);
  50. ),
  51. TP_printk("iwdev=%p caller=%pS loc: %s",
  52. __entry->iwdev,
  53. __entry->caller,
  54. __print_ip_addr(__get_dynamic_array(laddr),
  55. __entry->lport, __entry->ipv4)
  56. )
  57. );
  58. DECLARE_EVENT_CLASS(listener_template,
  59. TP_PROTO(struct irdma_cm_listener *listener),
  60. TP_ARGS(listener),
  61. TP_STRUCT__entry(__field(struct irdma_device *, iwdev)
  62. __field(u16, lport)
  63. __field(u16, vlan_id)
  64. __field(bool, ipv4)
  65. __field(enum irdma_cm_listener_state,
  66. state)
  67. __dynamic_array(u32, laddr, 4)
  68. ),
  69. TP_fast_assign(__entry->iwdev = listener->iwdev;
  70. __entry->lport = listener->loc_port;
  71. __entry->vlan_id = listener->vlan_id;
  72. __entry->ipv4 = listener->ipv4;
  73. __entry->state = listener->listener_state;
  74. memcpy(__get_dynamic_array(laddr),
  75. listener->loc_addr, 4);
  76. ),
  77. TP_printk("iwdev=%p vlan=%d loc: %s",
  78. __entry->iwdev,
  79. __entry->vlan_id,
  80. __print_ip_addr(__get_dynamic_array(laddr),
  81. __entry->lport, __entry->ipv4)
  82. )
  83. );
  84. DEFINE_EVENT(listener_template, irdma_find_listener,
  85. TP_PROTO(struct irdma_cm_listener *listener),
  86. TP_ARGS(listener));
  87. DEFINE_EVENT(listener_template, irdma_del_multiple_qhash,
  88. TP_PROTO(struct irdma_cm_listener *listener),
  89. TP_ARGS(listener));
  90. TRACE_EVENT(irdma_negotiate_mpa_v2,
  91. TP_PROTO(struct irdma_cm_node *cm_node),
  92. TP_ARGS(cm_node),
  93. TP_STRUCT__entry(__field(struct irdma_cm_node *, cm_node)
  94. __field(u16, ord_size)
  95. __field(u16, ird_size)
  96. ),
  97. TP_fast_assign(__entry->cm_node = cm_node;
  98. __entry->ord_size = cm_node->ord_size;
  99. __entry->ird_size = cm_node->ird_size;
  100. ),
  101. TP_printk("MPVA2 Negotiated cm_node=%p ORD:[%d], IRD:[%d]",
  102. __entry->cm_node,
  103. __entry->ord_size,
  104. __entry->ird_size
  105. )
  106. );
  107. DECLARE_EVENT_CLASS(tos_template,
  108. TP_PROTO(struct irdma_device *iwdev, u8 tos, u8 user_pri),
  109. TP_ARGS(iwdev, tos, user_pri),
  110. TP_STRUCT__entry(__field(struct irdma_device *, iwdev)
  111. __field(u8, tos)
  112. __field(u8, user_pri)
  113. ),
  114. TP_fast_assign(__entry->iwdev = iwdev;
  115. __entry->tos = tos;
  116. __entry->user_pri = user_pri;
  117. ),
  118. TP_printk("iwdev=%p TOS:[%d] UP:[%d]",
  119. __entry->iwdev,
  120. __entry->tos,
  121. __entry->user_pri
  122. )
  123. );
  124. DEFINE_EVENT(tos_template, irdma_listener_tos,
  125. TP_PROTO(struct irdma_device *iwdev, u8 tos, u8 user_pri),
  126. TP_ARGS(iwdev, tos, user_pri));
  127. DEFINE_EVENT(tos_template, irdma_dcb_tos,
  128. TP_PROTO(struct irdma_device *iwdev, u8 tos, u8 user_pri),
  129. TP_ARGS(iwdev, tos, user_pri));
  130. DECLARE_EVENT_CLASS(qhash_template,
  131. TP_PROTO(struct irdma_device *iwdev,
  132. struct irdma_cm_listener *listener,
  133. const char *dev_addr),
  134. TP_ARGS(iwdev, listener, dev_addr),
  135. TP_STRUCT__entry(__field(struct irdma_device *, iwdev)
  136. __field(u16, lport)
  137. __field(u16, vlan_id)
  138. __field(bool, ipv4)
  139. __dynamic_array(u32, laddr, 4)
  140. __dynamic_array(u32, mac, ETH_ALEN)
  141. ),
  142. TP_fast_assign(__entry->iwdev = iwdev;
  143. __entry->lport = listener->loc_port;
  144. __entry->vlan_id = listener->vlan_id;
  145. __entry->ipv4 = listener->ipv4;
  146. memcpy(__get_dynamic_array(laddr),
  147. listener->loc_addr, 4);
  148. ether_addr_copy(__get_dynamic_array(mac),
  149. dev_addr);
  150. ),
  151. TP_printk("iwdev=%p vlan=%d MAC=%6phC loc: %s",
  152. __entry->iwdev,
  153. __entry->vlan_id,
  154. __get_dynamic_array(mac),
  155. __print_ip_addr(__get_dynamic_array(laddr),
  156. __entry->lport, __entry->ipv4)
  157. )
  158. );
  159. DEFINE_EVENT(qhash_template, irdma_add_mqh_6,
  160. TP_PROTO(struct irdma_device *iwdev,
  161. struct irdma_cm_listener *listener,
  162. const char *dev_addr),
  163. TP_ARGS(iwdev, listener, dev_addr));
  164. DEFINE_EVENT(qhash_template, irdma_add_mqh_4,
  165. TP_PROTO(struct irdma_device *iwdev,
  166. struct irdma_cm_listener *listener,
  167. const char *dev_addr),
  168. TP_ARGS(iwdev, listener, dev_addr));
  169. TRACE_EVENT(irdma_addr_resolve,
  170. TP_PROTO(struct irdma_device *iwdev, char *dev_addr),
  171. TP_ARGS(iwdev, dev_addr),
  172. TP_STRUCT__entry(__field(struct irdma_device *, iwdev)
  173. __dynamic_array(u8, mac, ETH_ALEN)
  174. ),
  175. TP_fast_assign(__entry->iwdev = iwdev;
  176. ether_addr_copy(__get_dynamic_array(mac), dev_addr);
  177. ),
  178. TP_printk("iwdev=%p MAC=%6phC", __entry->iwdev,
  179. __get_dynamic_array(mac)
  180. )
  181. );
  182. TRACE_EVENT(irdma_send_cm_event,
  183. TP_PROTO(struct irdma_cm_node *cm_node, struct iw_cm_id *cm_id,
  184. enum iw_cm_event_type type, int status, void *caller),
  185. TP_ARGS(cm_node, cm_id, type, status, caller),
  186. TP_STRUCT__entry(__field(struct irdma_device *, iwdev)
  187. __field(struct irdma_cm_node *, cm_node)
  188. __field(struct iw_cm_id *, cm_id)
  189. __field(u32, refcount)
  190. __field(u16, lport)
  191. __field(u16, rport)
  192. __field(enum irdma_cm_node_state, state)
  193. __field(bool, ipv4)
  194. __field(u16, vlan_id)
  195. __field(int, accel)
  196. __field(enum iw_cm_event_type, type)
  197. __field(int, status)
  198. __field(void *, caller)
  199. __dynamic_array(u32, laddr, 4)
  200. __dynamic_array(u32, raddr, 4)
  201. ),
  202. TP_fast_assign(__entry->iwdev = cm_node->iwdev;
  203. __entry->cm_node = cm_node;
  204. __entry->cm_id = cm_id;
  205. __entry->refcount = refcount_read(&cm_node->refcnt);
  206. __entry->state = cm_node->state;
  207. __entry->lport = cm_node->loc_port;
  208. __entry->rport = cm_node->rem_port;
  209. __entry->ipv4 = cm_node->ipv4;
  210. __entry->vlan_id = cm_node->vlan_id;
  211. __entry->accel = cm_node->accelerated;
  212. __entry->type = type;
  213. __entry->status = status;
  214. __entry->caller = caller;
  215. memcpy(__get_dynamic_array(laddr),
  216. cm_node->loc_addr, 4);
  217. memcpy(__get_dynamic_array(raddr),
  218. cm_node->rem_addr, 4);
  219. ),
  220. TP_printk("iwdev=%p caller=%pS cm_id=%p node=%p refcnt=%d vlan_id=%d accel=%d state=%s event_type=%s status=%d loc: %s rem: %s",
  221. __entry->iwdev,
  222. __entry->caller,
  223. __entry->cm_id,
  224. __entry->cm_node,
  225. __entry->refcount,
  226. __entry->vlan_id,
  227. __entry->accel,
  228. parse_cm_state(__entry->state),
  229. parse_iw_event_type(__entry->type),
  230. __entry->status,
  231. __print_ip_addr(__get_dynamic_array(laddr),
  232. __entry->lport, __entry->ipv4),
  233. __print_ip_addr(__get_dynamic_array(raddr),
  234. __entry->rport, __entry->ipv4)
  235. )
  236. );
  237. TRACE_EVENT(irdma_send_cm_event_no_node,
  238. TP_PROTO(struct iw_cm_id *cm_id, enum iw_cm_event_type type,
  239. int status, void *caller),
  240. TP_ARGS(cm_id, type, status, caller),
  241. TP_STRUCT__entry(__field(struct iw_cm_id *, cm_id)
  242. __field(enum iw_cm_event_type, type)
  243. __field(int, status)
  244. __field(void *, caller)
  245. ),
  246. TP_fast_assign(__entry->cm_id = cm_id;
  247. __entry->type = type;
  248. __entry->status = status;
  249. __entry->caller = caller;
  250. ),
  251. TP_printk("cm_id=%p caller=%pS event_type=%s status=%d",
  252. __entry->cm_id,
  253. __entry->caller,
  254. parse_iw_event_type(__entry->type),
  255. __entry->status
  256. )
  257. );
  258. DECLARE_EVENT_CLASS(cm_node_template,
  259. TP_PROTO(struct irdma_cm_node *cm_node,
  260. enum irdma_cm_event_type type, void *caller),
  261. TP_ARGS(cm_node, type, caller),
  262. TP_STRUCT__entry(__field(struct irdma_device *, iwdev)
  263. __field(struct irdma_cm_node *, cm_node)
  264. __field(u32, refcount)
  265. __field(u16, lport)
  266. __field(u16, rport)
  267. __field(enum irdma_cm_node_state, state)
  268. __field(bool, ipv4)
  269. __field(u16, vlan_id)
  270. __field(int, accel)
  271. __field(enum irdma_cm_event_type, type)
  272. __field(void *, caller)
  273. __dynamic_array(u32, laddr, 4)
  274. __dynamic_array(u32, raddr, 4)
  275. ),
  276. TP_fast_assign(__entry->iwdev = cm_node->iwdev;
  277. __entry->cm_node = cm_node;
  278. __entry->refcount = refcount_read(&cm_node->refcnt);
  279. __entry->state = cm_node->state;
  280. __entry->lport = cm_node->loc_port;
  281. __entry->rport = cm_node->rem_port;
  282. __entry->ipv4 = cm_node->ipv4;
  283. __entry->vlan_id = cm_node->vlan_id;
  284. __entry->accel = cm_node->accelerated;
  285. __entry->type = type;
  286. __entry->caller = caller;
  287. memcpy(__get_dynamic_array(laddr),
  288. cm_node->loc_addr, 4);
  289. memcpy(__get_dynamic_array(raddr),
  290. cm_node->rem_addr, 4);
  291. ),
  292. TP_printk("iwdev=%p caller=%pS node=%p refcnt=%d vlan_id=%d accel=%d state=%s event_type=%s loc: %s rem: %s",
  293. __entry->iwdev,
  294. __entry->caller,
  295. __entry->cm_node,
  296. __entry->refcount,
  297. __entry->vlan_id,
  298. __entry->accel,
  299. parse_cm_state(__entry->state),
  300. parse_cm_event_type(__entry->type),
  301. __print_ip_addr(__get_dynamic_array(laddr),
  302. __entry->lport, __entry->ipv4),
  303. __print_ip_addr(__get_dynamic_array(raddr),
  304. __entry->rport, __entry->ipv4)
  305. )
  306. );
  307. DEFINE_EVENT(cm_node_template, irdma_create_event,
  308. TP_PROTO(struct irdma_cm_node *cm_node,
  309. enum irdma_cm_event_type type, void *caller),
  310. TP_ARGS(cm_node, type, caller));
  311. DEFINE_EVENT(cm_node_template, irdma_accept,
  312. TP_PROTO(struct irdma_cm_node *cm_node,
  313. enum irdma_cm_event_type type, void *caller),
  314. TP_ARGS(cm_node, type, caller));
  315. DEFINE_EVENT(cm_node_template, irdma_connect,
  316. TP_PROTO(struct irdma_cm_node *cm_node,
  317. enum irdma_cm_event_type type, void *caller),
  318. TP_ARGS(cm_node, type, caller));
  319. DEFINE_EVENT(cm_node_template, irdma_reject,
  320. TP_PROTO(struct irdma_cm_node *cm_node,
  321. enum irdma_cm_event_type type, void *caller),
  322. TP_ARGS(cm_node, type, caller));
  323. DEFINE_EVENT(cm_node_template, irdma_find_node,
  324. TP_PROTO(struct irdma_cm_node *cm_node,
  325. enum irdma_cm_event_type type, void *caller),
  326. TP_ARGS(cm_node, type, caller));
  327. DEFINE_EVENT(cm_node_template, irdma_send_reset,
  328. TP_PROTO(struct irdma_cm_node *cm_node,
  329. enum irdma_cm_event_type type, void *caller),
  330. TP_ARGS(cm_node, type, caller));
  331. DEFINE_EVENT(cm_node_template, irdma_rem_ref_cm_node,
  332. TP_PROTO(struct irdma_cm_node *cm_node,
  333. enum irdma_cm_event_type type, void *caller),
  334. TP_ARGS(cm_node, type, caller));
  335. DEFINE_EVENT(cm_node_template, irdma_cm_event_handler,
  336. TP_PROTO(struct irdma_cm_node *cm_node,
  337. enum irdma_cm_event_type type, void *caller),
  338. TP_ARGS(cm_node, type, caller));
  339. TRACE_EVENT(open_err_template,
  340. TP_PROTO(struct irdma_cm_node *cm_node, bool reset, void *caller),
  341. TP_ARGS(cm_node, reset, caller),
  342. TP_STRUCT__entry(__field(struct irdma_device *, iwdev)
  343. __field(struct irdma_cm_node *, cm_node)
  344. __field(enum irdma_cm_node_state, state)
  345. __field(bool, reset)
  346. __field(void *, caller)
  347. ),
  348. TP_fast_assign(__entry->iwdev = cm_node->iwdev;
  349. __entry->cm_node = cm_node;
  350. __entry->state = cm_node->state;
  351. __entry->reset = reset;
  352. __entry->caller = caller;
  353. ),
  354. TP_printk("iwdev=%p caller=%pS node%p reset=%d state=%s",
  355. __entry->iwdev,
  356. __entry->caller,
  357. __entry->cm_node,
  358. __entry->reset,
  359. parse_cm_state(__entry->state)
  360. )
  361. );
  362. DEFINE_EVENT(open_err_template, irdma_active_open_err,
  363. TP_PROTO(struct irdma_cm_node *cm_node, bool reset, void *caller),
  364. TP_ARGS(cm_node, reset, caller));
  365. DEFINE_EVENT(open_err_template, irdma_passive_open_err,
  366. TP_PROTO(struct irdma_cm_node *cm_node, bool reset, void *caller),
  367. TP_ARGS(cm_node, reset, caller));
  368. DECLARE_EVENT_CLASS(cm_node_ah_template,
  369. TP_PROTO(struct irdma_cm_node *cm_node),
  370. TP_ARGS(cm_node),
  371. TP_STRUCT__entry(__field(struct irdma_device *, iwdev)
  372. __field(struct irdma_cm_node *, cm_node)
  373. __field(struct irdma_sc_ah *, ah)
  374. __field(u32, refcount)
  375. __field(u16, lport)
  376. __field(u16, rport)
  377. __field(enum irdma_cm_node_state, state)
  378. __field(bool, ipv4)
  379. __field(u16, vlan_id)
  380. __field(int, accel)
  381. __dynamic_array(u32, laddr, 4)
  382. __dynamic_array(u32, raddr, 4)
  383. ),
  384. TP_fast_assign(__entry->iwdev = cm_node->iwdev;
  385. __entry->cm_node = cm_node;
  386. __entry->ah = cm_node->ah;
  387. __entry->refcount = refcount_read(&cm_node->refcnt);
  388. __entry->lport = cm_node->loc_port;
  389. __entry->rport = cm_node->rem_port;
  390. __entry->state = cm_node->state;
  391. __entry->ipv4 = cm_node->ipv4;
  392. __entry->vlan_id = cm_node->vlan_id;
  393. __entry->accel = cm_node->accelerated;
  394. memcpy(__get_dynamic_array(laddr),
  395. cm_node->loc_addr, 4);
  396. memcpy(__get_dynamic_array(raddr),
  397. cm_node->rem_addr, 4);
  398. ),
  399. TP_printk("iwdev=%p node=%p ah=%p refcnt=%d vlan_id=%d accel=%d state=%s loc: %s rem: %s",
  400. __entry->iwdev,
  401. __entry->cm_node,
  402. __entry->ah,
  403. __entry->refcount,
  404. __entry->vlan_id,
  405. __entry->accel,
  406. parse_cm_state(__entry->state),
  407. __print_ip_addr(__get_dynamic_array(laddr),
  408. __entry->lport, __entry->ipv4),
  409. __print_ip_addr(__get_dynamic_array(raddr),
  410. __entry->rport, __entry->ipv4)
  411. )
  412. );
  413. DEFINE_EVENT(cm_node_ah_template, irdma_cm_free_ah,
  414. TP_PROTO(struct irdma_cm_node *cm_node),
  415. TP_ARGS(cm_node));
  416. DEFINE_EVENT(cm_node_ah_template, irdma_create_ah,
  417. TP_PROTO(struct irdma_cm_node *cm_node),
  418. TP_ARGS(cm_node));
  419. #endif /* __TRACE_CM_H */
  420. #undef TRACE_INCLUDE_PATH
  421. #undef TRACE_INCLUDE_FILE
  422. #define TRACE_INCLUDE_PATH .
  423. #define TRACE_INCLUDE_FILE trace_cm
  424. #include <trace/define_trace.h>