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