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 184821bf1deSIra Weiny TRACE_EVENT(ib_mad_recv_done_handler, 185821bf1deSIra Weiny TP_PROTO(struct ib_mad_qp_info *qp_info, struct ib_wc *wc, 186821bf1deSIra Weiny struct ib_mad_hdr *mad_hdr), 187821bf1deSIra Weiny TP_ARGS(qp_info, wc, mad_hdr), 188821bf1deSIra Weiny 189821bf1deSIra Weiny TP_STRUCT__entry( 190821bf1deSIra Weiny __field(u8, base_version) 191821bf1deSIra Weiny __field(u8, mgmt_class) 192821bf1deSIra Weiny __field(u8, class_version) 193821bf1deSIra Weiny __field(u8, port_num) 194821bf1deSIra Weiny __field(u32, qp_num) 195821bf1deSIra Weiny __field(u16, status) 196821bf1deSIra Weiny __field(u16, class_specific) 197821bf1deSIra Weiny __field(u32, length) 198821bf1deSIra Weiny __field(u64, tid) 199821bf1deSIra Weiny __field(u8, method) 200821bf1deSIra Weiny __field(u8, sl) 201821bf1deSIra Weiny __field(u16, attr_id) 202821bf1deSIra Weiny __field(u32, attr_mod) 203821bf1deSIra Weiny __field(u16, src_qp) 204821bf1deSIra Weiny __field(u16, wc_status) 205821bf1deSIra Weiny __field(u32, slid) 206821bf1deSIra Weiny __field(u32, dev_index) 207821bf1deSIra Weiny __field(u16, pkey) 208821bf1deSIra Weiny ), 209821bf1deSIra Weiny 210821bf1deSIra Weiny TP_fast_assign( 211821bf1deSIra Weiny __entry->dev_index = qp_info->port_priv->device->index; 212821bf1deSIra Weiny __entry->port_num = qp_info->port_priv->port_num; 213821bf1deSIra Weiny __entry->qp_num = qp_info->qp->qp_num; 214821bf1deSIra Weiny __entry->length = wc->byte_len; 215821bf1deSIra Weiny __entry->base_version = mad_hdr->base_version; 216821bf1deSIra Weiny __entry->mgmt_class = mad_hdr->mgmt_class; 217821bf1deSIra Weiny __entry->class_version = mad_hdr->class_version; 218821bf1deSIra Weiny __entry->method = mad_hdr->method; 219821bf1deSIra Weiny __entry->status = mad_hdr->status; 220821bf1deSIra Weiny __entry->class_specific = mad_hdr->class_specific; 221821bf1deSIra Weiny __entry->tid = mad_hdr->tid; 222821bf1deSIra Weiny __entry->attr_id = mad_hdr->attr_id; 223821bf1deSIra Weiny __entry->attr_mod = mad_hdr->attr_mod; 224821bf1deSIra Weiny __entry->slid = wc->slid; 225821bf1deSIra Weiny __entry->src_qp = wc->src_qp; 226821bf1deSIra Weiny __entry->sl = wc->sl; 227821bf1deSIra Weiny ib_query_pkey(qp_info->port_priv->device, 228821bf1deSIra Weiny qp_info->port_priv->port_num, 229821bf1deSIra Weiny wc->pkey_index, &__entry->pkey); 230821bf1deSIra Weiny __entry->wc_status = wc->status; 231821bf1deSIra Weiny ), 232821bf1deSIra Weiny 233821bf1deSIra Weiny TP_printk("%d:%d QP%d : RECV WC Status %d : length %d : hdr : " \ 234821bf1deSIra Weiny "base_ver 0x%02x class 0x%02x class_ver 0x%02x " \ 235821bf1deSIra Weiny "method 0x%02x status 0x%04x class_specific 0x%04x " \ 236821bf1deSIra Weiny "tid 0x%016llx attr_id 0x%04x attr_mod 0x%08x " \ 237821bf1deSIra Weiny "slid 0x%08x src QP%d, sl %d pkey 0x%04x", 238821bf1deSIra Weiny __entry->dev_index, __entry->port_num, __entry->qp_num, 239821bf1deSIra Weiny __entry->wc_status, 240821bf1deSIra Weiny __entry->length, 241821bf1deSIra Weiny __entry->base_version, __entry->mgmt_class, 242821bf1deSIra Weiny __entry->class_version, __entry->method, 243821bf1deSIra Weiny be16_to_cpu(__entry->status), 244821bf1deSIra Weiny be16_to_cpu(__entry->class_specific), 245821bf1deSIra Weiny be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id), 246821bf1deSIra Weiny be32_to_cpu(__entry->attr_mod), 247821bf1deSIra Weiny __entry->slid, __entry->src_qp, __entry->sl, __entry->pkey 248821bf1deSIra Weiny ) 249821bf1deSIra Weiny ); 250821bf1deSIra Weiny 2510e65bae2SIra Weiny DECLARE_EVENT_CLASS(ib_mad_agent_template, 2520e65bae2SIra Weiny TP_PROTO(struct ib_mad_agent_private *agent), 2530e65bae2SIra Weiny TP_ARGS(agent), 2540e65bae2SIra Weiny 2550e65bae2SIra Weiny TP_STRUCT__entry( 2560e65bae2SIra Weiny __field(u32, dev_index) 2570e65bae2SIra Weiny __field(u32, hi_tid) 2580e65bae2SIra Weiny __field(u8, port_num) 2590e65bae2SIra Weiny __field(u8, mgmt_class) 2600e65bae2SIra Weiny __field(u8, mgmt_class_version) 2610e65bae2SIra Weiny ), 2620e65bae2SIra Weiny 2630e65bae2SIra Weiny TP_fast_assign( 2640e65bae2SIra Weiny __entry->dev_index = agent->agent.device->index; 2650e65bae2SIra Weiny __entry->port_num = agent->agent.port_num; 2660e65bae2SIra Weiny __entry->hi_tid = agent->agent.hi_tid; 2670e65bae2SIra Weiny 2680e65bae2SIra Weiny if (agent->reg_req) { 2690e65bae2SIra Weiny __entry->mgmt_class = agent->reg_req->mgmt_class; 2700e65bae2SIra Weiny __entry->mgmt_class_version = 2710e65bae2SIra Weiny agent->reg_req->mgmt_class_version; 2720e65bae2SIra Weiny } else { 2730e65bae2SIra Weiny __entry->mgmt_class = 0; 2740e65bae2SIra Weiny __entry->mgmt_class_version = 0; 2750e65bae2SIra Weiny } 2760e65bae2SIra Weiny ), 2770e65bae2SIra Weiny 2780e65bae2SIra Weiny TP_printk("%d:%d mad agent : hi_tid 0x%08x class 0x%02x class_ver 0x%02x", 2790e65bae2SIra Weiny __entry->dev_index, __entry->port_num, 2800e65bae2SIra Weiny __entry->hi_tid, __entry->mgmt_class, 2810e65bae2SIra Weiny __entry->mgmt_class_version 2820e65bae2SIra Weiny ) 2830e65bae2SIra Weiny ); 2840e65bae2SIra Weiny DEFINE_EVENT(ib_mad_agent_template, ib_mad_recv_done_agent, 2850e65bae2SIra Weiny TP_PROTO(struct ib_mad_agent_private *agent), 2860e65bae2SIra Weiny TP_ARGS(agent)); 2870e65bae2SIra Weiny DEFINE_EVENT(ib_mad_agent_template, ib_mad_send_done_agent, 2880e65bae2SIra Weiny TP_PROTO(struct ib_mad_agent_private *agent), 2890e65bae2SIra Weiny TP_ARGS(agent)); 2900e65bae2SIra Weiny DEFINE_EVENT(ib_mad_agent_template, ib_mad_create_agent, 2910e65bae2SIra Weiny TP_PROTO(struct ib_mad_agent_private *agent), 2920e65bae2SIra Weiny TP_ARGS(agent)); 2930e65bae2SIra Weiny DEFINE_EVENT(ib_mad_agent_template, ib_mad_unregister_agent, 2940e65bae2SIra Weiny TP_PROTO(struct ib_mad_agent_private *agent), 2950e65bae2SIra Weiny TP_ARGS(agent)); 2960e65bae2SIra Weiny 2974d60cad5SIra Weiny 298*2ccfbb70SIra Weiny 299*2ccfbb70SIra Weiny DECLARE_EVENT_CLASS(ib_mad_opa_smi_template, 300*2ccfbb70SIra Weiny TP_PROTO(struct opa_smp *smp), 301*2ccfbb70SIra Weiny TP_ARGS(smp), 302*2ccfbb70SIra Weiny 303*2ccfbb70SIra Weiny TP_STRUCT__entry( 304*2ccfbb70SIra Weiny __field(u64, mkey) 305*2ccfbb70SIra Weiny __field(u32, dr_slid) 306*2ccfbb70SIra Weiny __field(u32, dr_dlid) 307*2ccfbb70SIra Weiny __field(u8, hop_ptr) 308*2ccfbb70SIra Weiny __field(u8, hop_cnt) 309*2ccfbb70SIra Weiny __array(u8, initial_path, OPA_SMP_MAX_PATH_HOPS) 310*2ccfbb70SIra Weiny __array(u8, return_path, OPA_SMP_MAX_PATH_HOPS) 311*2ccfbb70SIra Weiny ), 312*2ccfbb70SIra Weiny 313*2ccfbb70SIra Weiny TP_fast_assign( 314*2ccfbb70SIra Weiny __entry->hop_ptr = smp->hop_ptr; 315*2ccfbb70SIra Weiny __entry->hop_cnt = smp->hop_cnt; 316*2ccfbb70SIra Weiny __entry->mkey = smp->mkey; 317*2ccfbb70SIra Weiny __entry->dr_slid = smp->route.dr.dr_slid; 318*2ccfbb70SIra Weiny __entry->dr_dlid = smp->route.dr.dr_dlid; 319*2ccfbb70SIra Weiny memcpy(__entry->initial_path, smp->route.dr.initial_path, 320*2ccfbb70SIra Weiny OPA_SMP_MAX_PATH_HOPS); 321*2ccfbb70SIra Weiny memcpy(__entry->return_path, smp->route.dr.return_path, 322*2ccfbb70SIra Weiny OPA_SMP_MAX_PATH_HOPS); 323*2ccfbb70SIra Weiny ), 324*2ccfbb70SIra Weiny 325*2ccfbb70SIra Weiny TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \ 326*2ccfbb70SIra Weiny "mkey 0x%016llx dr_slid 0x%08x dr_dlid 0x%08x " \ 327*2ccfbb70SIra Weiny "initial_path %*ph return_path %*ph ", 328*2ccfbb70SIra Weiny __entry->hop_ptr, __entry->hop_cnt, 329*2ccfbb70SIra Weiny be64_to_cpu(__entry->mkey), be32_to_cpu(__entry->dr_slid), 330*2ccfbb70SIra Weiny be32_to_cpu(__entry->dr_dlid), 331*2ccfbb70SIra Weiny OPA_SMP_MAX_PATH_HOPS, __entry->initial_path, 332*2ccfbb70SIra Weiny OPA_SMP_MAX_PATH_HOPS, __entry->return_path 333*2ccfbb70SIra Weiny ) 334*2ccfbb70SIra Weiny ); 335*2ccfbb70SIra Weiny 336*2ccfbb70SIra Weiny DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_opa_smi, 337*2ccfbb70SIra Weiny TP_PROTO(struct opa_smp *smp), 338*2ccfbb70SIra Weiny TP_ARGS(smp)); 339*2ccfbb70SIra Weiny DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_out_opa_smi, 340*2ccfbb70SIra Weiny TP_PROTO(struct opa_smp *smp), 341*2ccfbb70SIra Weiny TP_ARGS(smp)); 342*2ccfbb70SIra Weiny 343*2ccfbb70SIra Weiny 344*2ccfbb70SIra Weiny DECLARE_EVENT_CLASS(ib_mad_opa_ib_template, 345*2ccfbb70SIra Weiny TP_PROTO(struct ib_smp *smp), 346*2ccfbb70SIra Weiny TP_ARGS(smp), 347*2ccfbb70SIra Weiny 348*2ccfbb70SIra Weiny TP_STRUCT__entry( 349*2ccfbb70SIra Weiny __field(u64, mkey) 350*2ccfbb70SIra Weiny __field(u32, dr_slid) 351*2ccfbb70SIra Weiny __field(u32, dr_dlid) 352*2ccfbb70SIra Weiny __field(u8, hop_ptr) 353*2ccfbb70SIra Weiny __field(u8, hop_cnt) 354*2ccfbb70SIra Weiny __array(u8, initial_path, IB_SMP_MAX_PATH_HOPS) 355*2ccfbb70SIra Weiny __array(u8, return_path, IB_SMP_MAX_PATH_HOPS) 356*2ccfbb70SIra Weiny ), 357*2ccfbb70SIra Weiny 358*2ccfbb70SIra Weiny TP_fast_assign( 359*2ccfbb70SIra Weiny __entry->hop_ptr = smp->hop_ptr; 360*2ccfbb70SIra Weiny __entry->hop_cnt = smp->hop_cnt; 361*2ccfbb70SIra Weiny __entry->mkey = smp->mkey; 362*2ccfbb70SIra Weiny __entry->dr_slid = smp->dr_slid; 363*2ccfbb70SIra Weiny __entry->dr_dlid = smp->dr_dlid; 364*2ccfbb70SIra Weiny memcpy(__entry->initial_path, smp->initial_path, 365*2ccfbb70SIra Weiny IB_SMP_MAX_PATH_HOPS); 366*2ccfbb70SIra Weiny memcpy(__entry->return_path, smp->return_path, 367*2ccfbb70SIra Weiny IB_SMP_MAX_PATH_HOPS); 368*2ccfbb70SIra Weiny ), 369*2ccfbb70SIra Weiny 370*2ccfbb70SIra Weiny TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \ 371*2ccfbb70SIra Weiny "mkey 0x%016llx dr_slid 0x%04x dr_dlid 0x%04x " \ 372*2ccfbb70SIra Weiny "initial_path %*ph return_path %*ph ", 373*2ccfbb70SIra Weiny __entry->hop_ptr, __entry->hop_cnt, 374*2ccfbb70SIra Weiny be64_to_cpu(__entry->mkey), be16_to_cpu(__entry->dr_slid), 375*2ccfbb70SIra Weiny be16_to_cpu(__entry->dr_dlid), 376*2ccfbb70SIra Weiny IB_SMP_MAX_PATH_HOPS, __entry->initial_path, 377*2ccfbb70SIra Weiny IB_SMP_MAX_PATH_HOPS, __entry->return_path 378*2ccfbb70SIra Weiny ) 379*2ccfbb70SIra Weiny ); 380*2ccfbb70SIra Weiny 381*2ccfbb70SIra Weiny DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_ib_smi, 382*2ccfbb70SIra Weiny TP_PROTO(struct ib_smp *smp), 383*2ccfbb70SIra Weiny TP_ARGS(smp)); 384*2ccfbb70SIra Weiny DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_out_ib_smi, 385*2ccfbb70SIra Weiny TP_PROTO(struct ib_smp *smp), 386*2ccfbb70SIra Weiny TP_ARGS(smp)); 387*2ccfbb70SIra Weiny 3884d60cad5SIra Weiny #endif /* _TRACE_IB_MAD_H */ 3894d60cad5SIra Weiny 3904d60cad5SIra Weiny #include <trace/define_trace.h> 391