14d60cad5SIra Weiny /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 24d60cad5SIra Weiny 34d60cad5SIra Weiny /* 44d60cad5SIra Weiny * Copyright (c) 2018 Intel Corporation. All rights reserved. 54d60cad5SIra Weiny */ 64d60cad5SIra Weiny 74d60cad5SIra Weiny #undef TRACE_SYSTEM 84d60cad5SIra Weiny #define TRACE_SYSTEM ib_mad 94d60cad5SIra Weiny 104d60cad5SIra Weiny #if !defined(_TRACE_IB_MAD_H) || defined(TRACE_HEADER_MULTI_READ) 114d60cad5SIra Weiny #define _TRACE_IB_MAD_H 124d60cad5SIra Weiny 134d60cad5SIra Weiny #include <linux/tracepoint.h> 144d60cad5SIra Weiny #include <rdma/ib_mad.h> 154d60cad5SIra Weiny 164d60cad5SIra Weiny #ifdef CONFIG_TRACEPOINTS 174d60cad5SIra Weiny struct trace_event_raw_ib_mad_send_template; 184d60cad5SIra Weiny static void create_mad_addr_info(struct ib_mad_send_wr_private *mad_send_wr, 194d60cad5SIra Weiny struct ib_mad_qp_info *qp_info, 204d60cad5SIra Weiny struct trace_event_raw_ib_mad_send_template *entry); 214d60cad5SIra Weiny #endif 224d60cad5SIra Weiny 234d60cad5SIra Weiny DECLARE_EVENT_CLASS(ib_mad_send_template, 244d60cad5SIra Weiny TP_PROTO(struct ib_mad_send_wr_private *wr, 254d60cad5SIra Weiny struct ib_mad_qp_info *qp_info), 264d60cad5SIra Weiny TP_ARGS(wr, qp_info), 274d60cad5SIra Weiny 284d60cad5SIra Weiny TP_STRUCT__entry( 294d60cad5SIra Weiny __field(u8, base_version) 304d60cad5SIra Weiny __field(u8, mgmt_class) 314d60cad5SIra Weiny __field(u8, class_version) 324d60cad5SIra Weiny __field(u8, port_num) 334d60cad5SIra Weiny __field(u32, qp_num) 344d60cad5SIra Weiny __field(u8, method) 354d60cad5SIra Weiny __field(u8, sl) 364d60cad5SIra Weiny __field(u16, attr_id) 374d60cad5SIra Weiny __field(u32, attr_mod) 384d60cad5SIra Weiny __field(u64, wrtid) 394d60cad5SIra Weiny __field(u64, tid) 404d60cad5SIra Weiny __field(u16, status) 414d60cad5SIra Weiny __field(u16, class_specific) 424d60cad5SIra Weiny __field(u32, length) 434d60cad5SIra Weiny __field(u32, dlid) 444d60cad5SIra Weiny __field(u32, rqpn) 454d60cad5SIra Weiny __field(u32, rqkey) 464d60cad5SIra Weiny __field(u32, dev_index) 474d60cad5SIra Weiny __field(void *, agent_priv) 484d60cad5SIra Weiny __field(unsigned long, timeout) 494d60cad5SIra Weiny __field(int, retries_left) 504d60cad5SIra Weiny __field(int, max_retries) 514d60cad5SIra Weiny __field(int, retry) 524d60cad5SIra Weiny __field(u16, pkey) 534d60cad5SIra Weiny ), 544d60cad5SIra Weiny 554d60cad5SIra Weiny TP_fast_assign( 564d60cad5SIra Weiny __entry->dev_index = wr->mad_agent_priv->agent.device->index; 574d60cad5SIra Weiny __entry->port_num = wr->mad_agent_priv->agent.port_num; 584d60cad5SIra Weiny __entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num; 594d60cad5SIra Weiny __entry->agent_priv = wr->mad_agent_priv; 604d60cad5SIra Weiny __entry->wrtid = wr->tid; 614d60cad5SIra Weiny __entry->max_retries = wr->max_retries; 624d60cad5SIra Weiny __entry->retries_left = wr->retries_left; 634d60cad5SIra Weiny __entry->retry = wr->retry; 644d60cad5SIra Weiny __entry->timeout = wr->timeout; 654d60cad5SIra Weiny __entry->length = wr->send_buf.hdr_len + 664d60cad5SIra Weiny wr->send_buf.data_len; 674d60cad5SIra Weiny __entry->base_version = 684d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->base_version; 694d60cad5SIra Weiny __entry->mgmt_class = 704d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class; 714d60cad5SIra Weiny __entry->class_version = 724d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->class_version; 734d60cad5SIra Weiny __entry->method = 744d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->method; 754d60cad5SIra Weiny __entry->status = 764d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->status; 774d60cad5SIra Weiny __entry->class_specific = 784d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->class_specific; 794d60cad5SIra Weiny __entry->tid = ((struct ib_mad_hdr *)wr->send_buf.mad)->tid; 804d60cad5SIra Weiny __entry->attr_id = 814d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_id; 824d60cad5SIra Weiny __entry->attr_mod = 834d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->attr_mod; 844d60cad5SIra Weiny create_mad_addr_info(wr, qp_info, __entry); 854d60cad5SIra Weiny ), 864d60cad5SIra Weiny 874d60cad5SIra Weiny TP_printk("%d:%d QP%d agent %p: " \ 884d60cad5SIra Weiny "wrtid 0x%llx; %d/%d retries(%d); timeout %lu length %d : " \ 894d60cad5SIra Weiny "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \ 904d60cad5SIra Weiny "method 0x%x status 0x%x class_specific 0x%x tid 0x%llx " \ 914d60cad5SIra Weiny "attr_id 0x%x attr_mod 0x%x => dlid 0x%08x sl %d "\ 924d60cad5SIra Weiny "pkey 0x%x rpqn 0x%x rqpkey 0x%x", 934d60cad5SIra Weiny __entry->dev_index, __entry->port_num, __entry->qp_num, 944d60cad5SIra Weiny __entry->agent_priv, be64_to_cpu(__entry->wrtid), 954d60cad5SIra Weiny __entry->retries_left, __entry->max_retries, 964d60cad5SIra Weiny __entry->retry, __entry->timeout, __entry->length, 974d60cad5SIra Weiny __entry->base_version, __entry->mgmt_class, 984d60cad5SIra Weiny __entry->class_version, 994d60cad5SIra Weiny __entry->method, be16_to_cpu(__entry->status), 1004d60cad5SIra Weiny be16_to_cpu(__entry->class_specific), 1014d60cad5SIra Weiny be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id), 1024d60cad5SIra Weiny be32_to_cpu(__entry->attr_mod), 1034d60cad5SIra Weiny be32_to_cpu(__entry->dlid), __entry->sl, __entry->pkey, 1044d60cad5SIra Weiny __entry->rqpn, __entry->rqkey 1054d60cad5SIra Weiny ) 1064d60cad5SIra Weiny ); 1074d60cad5SIra Weiny 1084d60cad5SIra Weiny DEFINE_EVENT(ib_mad_send_template, ib_mad_error_handler, 1094d60cad5SIra Weiny TP_PROTO(struct ib_mad_send_wr_private *wr, 1104d60cad5SIra Weiny struct ib_mad_qp_info *qp_info), 1114d60cad5SIra Weiny TP_ARGS(wr, qp_info)); 1124d60cad5SIra Weiny DEFINE_EVENT(ib_mad_send_template, ib_mad_ib_send_mad, 1134d60cad5SIra Weiny TP_PROTO(struct ib_mad_send_wr_private *wr, 1144d60cad5SIra Weiny struct ib_mad_qp_info *qp_info), 1154d60cad5SIra Weiny TP_ARGS(wr, qp_info)); 1164d60cad5SIra Weiny DEFINE_EVENT(ib_mad_send_template, ib_mad_send_done_resend, 1174d60cad5SIra Weiny TP_PROTO(struct ib_mad_send_wr_private *wr, 1184d60cad5SIra Weiny struct ib_mad_qp_info *qp_info), 1194d60cad5SIra Weiny TP_ARGS(wr, qp_info)); 1204d60cad5SIra Weiny 1214d60cad5SIra Weiny TRACE_EVENT(ib_mad_send_done_handler, 1224d60cad5SIra Weiny TP_PROTO(struct ib_mad_send_wr_private *wr, struct ib_wc *wc), 1234d60cad5SIra Weiny TP_ARGS(wr, wc), 1244d60cad5SIra Weiny 1254d60cad5SIra Weiny TP_STRUCT__entry( 1264d60cad5SIra Weiny __field(u8, port_num) 1274d60cad5SIra Weiny __field(u8, base_version) 1284d60cad5SIra Weiny __field(u8, mgmt_class) 1294d60cad5SIra Weiny __field(u8, class_version) 1304d60cad5SIra Weiny __field(u32, qp_num) 1314d60cad5SIra Weiny __field(u64, wrtid) 1324d60cad5SIra Weiny __field(u16, status) 1334d60cad5SIra Weiny __field(u16, wc_status) 1344d60cad5SIra Weiny __field(u32, length) 1354d60cad5SIra Weiny __field(void *, agent_priv) 1364d60cad5SIra Weiny __field(unsigned long, timeout) 1374d60cad5SIra Weiny __field(u32, dev_index) 1384d60cad5SIra Weiny __field(int, retries_left) 1394d60cad5SIra Weiny __field(int, max_retries) 1404d60cad5SIra Weiny __field(int, retry) 1414d60cad5SIra Weiny __field(u8, method) 1424d60cad5SIra Weiny ), 1434d60cad5SIra Weiny 1444d60cad5SIra Weiny TP_fast_assign( 1454d60cad5SIra Weiny __entry->dev_index = wr->mad_agent_priv->agent.device->index; 1464d60cad5SIra Weiny __entry->port_num = wr->mad_agent_priv->agent.port_num; 1474d60cad5SIra Weiny __entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num; 1484d60cad5SIra Weiny __entry->agent_priv = wr->mad_agent_priv; 1494d60cad5SIra Weiny __entry->wrtid = wr->tid; 1504d60cad5SIra Weiny __entry->max_retries = wr->max_retries; 1514d60cad5SIra Weiny __entry->retries_left = wr->retries_left; 1524d60cad5SIra Weiny __entry->retry = wr->retry; 1534d60cad5SIra Weiny __entry->timeout = wr->timeout; 1544d60cad5SIra Weiny __entry->base_version = 1554d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->base_version; 1564d60cad5SIra Weiny __entry->mgmt_class = 1574d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class; 1584d60cad5SIra Weiny __entry->class_version = 1594d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->class_version; 1604d60cad5SIra Weiny __entry->method = 1614d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->method; 1624d60cad5SIra Weiny __entry->status = 1634d60cad5SIra Weiny ((struct ib_mad_hdr *)wr->send_buf.mad)->status; 1644d60cad5SIra Weiny __entry->wc_status = wc->status; 1654d60cad5SIra Weiny __entry->length = wc->byte_len; 1664d60cad5SIra Weiny ), 1674d60cad5SIra Weiny 1684d60cad5SIra Weiny TP_printk("%d:%d QP%d : SEND WC Status %d : agent %p: " \ 1694d60cad5SIra Weiny "wrtid 0x%llx %d/%d retries(%d) timeout %lu length %d: " \ 1704d60cad5SIra Weiny "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \ 1714d60cad5SIra Weiny "method 0x%x status 0x%x", 1724d60cad5SIra Weiny __entry->dev_index, __entry->port_num, __entry->qp_num, 1734d60cad5SIra Weiny __entry->wc_status, 1744d60cad5SIra Weiny __entry->agent_priv, be64_to_cpu(__entry->wrtid), 1754d60cad5SIra Weiny __entry->retries_left, __entry->max_retries, 1764d60cad5SIra Weiny __entry->retry, __entry->timeout, 1774d60cad5SIra Weiny __entry->length, 1784d60cad5SIra Weiny __entry->base_version, __entry->mgmt_class, 1794d60cad5SIra Weiny __entry->class_version, __entry->method, 1804d60cad5SIra Weiny be16_to_cpu(__entry->status) 1814d60cad5SIra Weiny ) 1824d60cad5SIra Weiny ); 1834d60cad5SIra Weiny 184*821bf1deSIra Weiny TRACE_EVENT(ib_mad_recv_done_handler, 185*821bf1deSIra Weiny TP_PROTO(struct ib_mad_qp_info *qp_info, struct ib_wc *wc, 186*821bf1deSIra Weiny struct ib_mad_hdr *mad_hdr), 187*821bf1deSIra Weiny TP_ARGS(qp_info, wc, mad_hdr), 188*821bf1deSIra Weiny 189*821bf1deSIra Weiny TP_STRUCT__entry( 190*821bf1deSIra Weiny __field(u8, base_version) 191*821bf1deSIra Weiny __field(u8, mgmt_class) 192*821bf1deSIra Weiny __field(u8, class_version) 193*821bf1deSIra Weiny __field(u8, port_num) 194*821bf1deSIra Weiny __field(u32, qp_num) 195*821bf1deSIra Weiny __field(u16, status) 196*821bf1deSIra Weiny __field(u16, class_specific) 197*821bf1deSIra Weiny __field(u32, length) 198*821bf1deSIra Weiny __field(u64, tid) 199*821bf1deSIra Weiny __field(u8, method) 200*821bf1deSIra Weiny __field(u8, sl) 201*821bf1deSIra Weiny __field(u16, attr_id) 202*821bf1deSIra Weiny __field(u32, attr_mod) 203*821bf1deSIra Weiny __field(u16, src_qp) 204*821bf1deSIra Weiny __field(u16, wc_status) 205*821bf1deSIra Weiny __field(u32, slid) 206*821bf1deSIra Weiny __field(u32, dev_index) 207*821bf1deSIra Weiny __field(u16, pkey) 208*821bf1deSIra Weiny ), 209*821bf1deSIra Weiny 210*821bf1deSIra Weiny TP_fast_assign( 211*821bf1deSIra Weiny __entry->dev_index = qp_info->port_priv->device->index; 212*821bf1deSIra Weiny __entry->port_num = qp_info->port_priv->port_num; 213*821bf1deSIra Weiny __entry->qp_num = qp_info->qp->qp_num; 214*821bf1deSIra Weiny __entry->length = wc->byte_len; 215*821bf1deSIra Weiny __entry->base_version = mad_hdr->base_version; 216*821bf1deSIra Weiny __entry->mgmt_class = mad_hdr->mgmt_class; 217*821bf1deSIra Weiny __entry->class_version = mad_hdr->class_version; 218*821bf1deSIra Weiny __entry->method = mad_hdr->method; 219*821bf1deSIra Weiny __entry->status = mad_hdr->status; 220*821bf1deSIra Weiny __entry->class_specific = mad_hdr->class_specific; 221*821bf1deSIra Weiny __entry->tid = mad_hdr->tid; 222*821bf1deSIra Weiny __entry->attr_id = mad_hdr->attr_id; 223*821bf1deSIra Weiny __entry->attr_mod = mad_hdr->attr_mod; 224*821bf1deSIra Weiny __entry->slid = wc->slid; 225*821bf1deSIra Weiny __entry->src_qp = wc->src_qp; 226*821bf1deSIra Weiny __entry->sl = wc->sl; 227*821bf1deSIra Weiny ib_query_pkey(qp_info->port_priv->device, 228*821bf1deSIra Weiny qp_info->port_priv->port_num, 229*821bf1deSIra Weiny wc->pkey_index, &__entry->pkey); 230*821bf1deSIra Weiny __entry->wc_status = wc->status; 231*821bf1deSIra Weiny ), 232*821bf1deSIra Weiny 233*821bf1deSIra Weiny TP_printk("%d:%d QP%d : RECV WC Status %d : length %d : hdr : " \ 234*821bf1deSIra Weiny "base_ver 0x%02x class 0x%02x class_ver 0x%02x " \ 235*821bf1deSIra Weiny "method 0x%02x status 0x%04x class_specific 0x%04x " \ 236*821bf1deSIra Weiny "tid 0x%016llx attr_id 0x%04x attr_mod 0x%08x " \ 237*821bf1deSIra Weiny "slid 0x%08x src QP%d, sl %d pkey 0x%04x", 238*821bf1deSIra Weiny __entry->dev_index, __entry->port_num, __entry->qp_num, 239*821bf1deSIra Weiny __entry->wc_status, 240*821bf1deSIra Weiny __entry->length, 241*821bf1deSIra Weiny __entry->base_version, __entry->mgmt_class, 242*821bf1deSIra Weiny __entry->class_version, __entry->method, 243*821bf1deSIra Weiny be16_to_cpu(__entry->status), 244*821bf1deSIra Weiny be16_to_cpu(__entry->class_specific), 245*821bf1deSIra Weiny be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id), 246*821bf1deSIra Weiny be32_to_cpu(__entry->attr_mod), 247*821bf1deSIra Weiny __entry->slid, __entry->src_qp, __entry->sl, __entry->pkey 248*821bf1deSIra Weiny ) 249*821bf1deSIra Weiny ); 250*821bf1deSIra Weiny 2514d60cad5SIra Weiny 2524d60cad5SIra Weiny #endif /* _TRACE_IB_MAD_H */ 2534d60cad5SIra Weiny 2544d60cad5SIra Weiny #include <trace/define_trace.h> 255