1*a131d164SKaike Wan /* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */ 2*a131d164SKaike Wan /* 3*a131d164SKaike Wan * Copyright(c) 2018 Intel Corporation. 4*a131d164SKaike Wan * 5*a131d164SKaike Wan */ 6*a131d164SKaike Wan #if !defined(__HFI1_TRACE_TID_H) || defined(TRACE_HEADER_MULTI_READ) 7*a131d164SKaike Wan #define __HFI1_TRACE_TID_H 8*a131d164SKaike Wan 9*a131d164SKaike Wan #include <linux/tracepoint.h> 10*a131d164SKaike Wan #include <linux/trace_seq.h> 11*a131d164SKaike Wan 12*a131d164SKaike Wan #include "hfi.h" 13*a131d164SKaike Wan 14*a131d164SKaike Wan #define tidtype_name(type) { PT_##type, #type } 15*a131d164SKaike Wan #define show_tidtype(type) \ 16*a131d164SKaike Wan __print_symbolic(type, \ 17*a131d164SKaike Wan tidtype_name(EXPECTED), \ 18*a131d164SKaike Wan tidtype_name(EAGER), \ 19*a131d164SKaike Wan tidtype_name(INVALID)) \ 20*a131d164SKaike Wan 21*a131d164SKaike Wan #undef TRACE_SYSTEM 22*a131d164SKaike Wan #define TRACE_SYSTEM hfi1_tid 23*a131d164SKaike Wan 24*a131d164SKaike Wan #define OPFN_PARAM_PRN "[%s] qpn 0x%x %s OPFN: qp 0x%x, max read %u, " \ 25*a131d164SKaike Wan "max write %u, max length %u, jkey 0x%x timeout %u " \ 26*a131d164SKaike Wan "urg %u" 27*a131d164SKaike Wan 28*a131d164SKaike Wan DECLARE_EVENT_CLASS(/* class */ 29*a131d164SKaike Wan hfi1_exp_tid_reg_unreg, 30*a131d164SKaike Wan TP_PROTO(unsigned int ctxt, u16 subctxt, u32 rarr, u32 npages, 31*a131d164SKaike Wan unsigned long va, unsigned long pa, dma_addr_t dma), 32*a131d164SKaike Wan TP_ARGS(ctxt, subctxt, rarr, npages, va, pa, dma), 33*a131d164SKaike Wan TP_STRUCT__entry(/* entry */ 34*a131d164SKaike Wan __field(unsigned int, ctxt) 35*a131d164SKaike Wan __field(u16, subctxt) 36*a131d164SKaike Wan __field(u32, rarr) 37*a131d164SKaike Wan __field(u32, npages) 38*a131d164SKaike Wan __field(unsigned long, va) 39*a131d164SKaike Wan __field(unsigned long, pa) 40*a131d164SKaike Wan __field(dma_addr_t, dma) 41*a131d164SKaike Wan ), 42*a131d164SKaike Wan TP_fast_assign(/* assign */ 43*a131d164SKaike Wan __entry->ctxt = ctxt; 44*a131d164SKaike Wan __entry->subctxt = subctxt; 45*a131d164SKaike Wan __entry->rarr = rarr; 46*a131d164SKaike Wan __entry->npages = npages; 47*a131d164SKaike Wan __entry->va = va; 48*a131d164SKaike Wan __entry->pa = pa; 49*a131d164SKaike Wan __entry->dma = dma; 50*a131d164SKaike Wan ), 51*a131d164SKaike Wan TP_printk("[%u:%u] entry:%u, %u pages @ 0x%lx, va:0x%lx dma:0x%llx", 52*a131d164SKaike Wan __entry->ctxt, 53*a131d164SKaike Wan __entry->subctxt, 54*a131d164SKaike Wan __entry->rarr, 55*a131d164SKaike Wan __entry->npages, 56*a131d164SKaike Wan __entry->pa, 57*a131d164SKaike Wan __entry->va, 58*a131d164SKaike Wan __entry->dma 59*a131d164SKaike Wan ) 60*a131d164SKaike Wan ); 61*a131d164SKaike Wan 62*a131d164SKaike Wan DEFINE_EVENT(/* exp_tid_unreg */ 63*a131d164SKaike Wan hfi1_exp_tid_reg_unreg, hfi1_exp_tid_unreg, 64*a131d164SKaike Wan TP_PROTO(unsigned int ctxt, u16 subctxt, u32 rarr, u32 npages, 65*a131d164SKaike Wan unsigned long va, unsigned long pa, dma_addr_t dma), 66*a131d164SKaike Wan TP_ARGS(ctxt, subctxt, rarr, npages, va, pa, dma) 67*a131d164SKaike Wan ); 68*a131d164SKaike Wan 69*a131d164SKaike Wan DEFINE_EVENT(/* exp_tid_reg */ 70*a131d164SKaike Wan hfi1_exp_tid_reg_unreg, hfi1_exp_tid_reg, 71*a131d164SKaike Wan TP_PROTO(unsigned int ctxt, u16 subctxt, u32 rarr, u32 npages, 72*a131d164SKaike Wan unsigned long va, unsigned long pa, dma_addr_t dma), 73*a131d164SKaike Wan TP_ARGS(ctxt, subctxt, rarr, npages, va, pa, dma) 74*a131d164SKaike Wan ); 75*a131d164SKaike Wan 76*a131d164SKaike Wan TRACE_EVENT(/* put_tid */ 77*a131d164SKaike Wan hfi1_put_tid, 78*a131d164SKaike Wan TP_PROTO(struct hfi1_devdata *dd, 79*a131d164SKaike Wan u32 index, u32 type, unsigned long pa, u16 order), 80*a131d164SKaike Wan TP_ARGS(dd, index, type, pa, order), 81*a131d164SKaike Wan TP_STRUCT__entry(/* entry */ 82*a131d164SKaike Wan DD_DEV_ENTRY(dd) 83*a131d164SKaike Wan __field(unsigned long, pa); 84*a131d164SKaike Wan __field(u32, index); 85*a131d164SKaike Wan __field(u32, type); 86*a131d164SKaike Wan __field(u16, order); 87*a131d164SKaike Wan ), 88*a131d164SKaike Wan TP_fast_assign(/* assign */ 89*a131d164SKaike Wan DD_DEV_ASSIGN(dd); 90*a131d164SKaike Wan __entry->pa = pa; 91*a131d164SKaike Wan __entry->index = index; 92*a131d164SKaike Wan __entry->type = type; 93*a131d164SKaike Wan __entry->order = order; 94*a131d164SKaike Wan ), 95*a131d164SKaike Wan TP_printk("[%s] type %s pa %lx index %u order %u", 96*a131d164SKaike Wan __get_str(dev), 97*a131d164SKaike Wan show_tidtype(__entry->type), 98*a131d164SKaike Wan __entry->pa, 99*a131d164SKaike Wan __entry->index, 100*a131d164SKaike Wan __entry->order 101*a131d164SKaike Wan ) 102*a131d164SKaike Wan ); 103*a131d164SKaike Wan 104*a131d164SKaike Wan TRACE_EVENT(/* exp_tid_inval */ 105*a131d164SKaike Wan hfi1_exp_tid_inval, 106*a131d164SKaike Wan TP_PROTO(unsigned int ctxt, u16 subctxt, unsigned long va, u32 rarr, 107*a131d164SKaike Wan u32 npages, dma_addr_t dma), 108*a131d164SKaike Wan TP_ARGS(ctxt, subctxt, va, rarr, npages, dma), 109*a131d164SKaike Wan TP_STRUCT__entry(/* entry */ 110*a131d164SKaike Wan __field(unsigned int, ctxt) 111*a131d164SKaike Wan __field(u16, subctxt) 112*a131d164SKaike Wan __field(unsigned long, va) 113*a131d164SKaike Wan __field(u32, rarr) 114*a131d164SKaike Wan __field(u32, npages) 115*a131d164SKaike Wan __field(dma_addr_t, dma) 116*a131d164SKaike Wan ), 117*a131d164SKaike Wan TP_fast_assign(/* assign */ 118*a131d164SKaike Wan __entry->ctxt = ctxt; 119*a131d164SKaike Wan __entry->subctxt = subctxt; 120*a131d164SKaike Wan __entry->va = va; 121*a131d164SKaike Wan __entry->rarr = rarr; 122*a131d164SKaike Wan __entry->npages = npages; 123*a131d164SKaike Wan __entry->dma = dma; 124*a131d164SKaike Wan ), 125*a131d164SKaike Wan TP_printk("[%u:%u] entry:%u, %u pages @ 0x%lx dma: 0x%llx", 126*a131d164SKaike Wan __entry->ctxt, 127*a131d164SKaike Wan __entry->subctxt, 128*a131d164SKaike Wan __entry->rarr, 129*a131d164SKaike Wan __entry->npages, 130*a131d164SKaike Wan __entry->va, 131*a131d164SKaike Wan __entry->dma 132*a131d164SKaike Wan ) 133*a131d164SKaike Wan ); 134*a131d164SKaike Wan 135*a131d164SKaike Wan DECLARE_EVENT_CLASS(/* opfn_state */ 136*a131d164SKaike Wan hfi1_opfn_state_template, 137*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp), 138*a131d164SKaike Wan TP_ARGS(qp), 139*a131d164SKaike Wan TP_STRUCT__entry(/* entry */ 140*a131d164SKaike Wan DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) 141*a131d164SKaike Wan __field(u32, qpn) 142*a131d164SKaike Wan __field(u16, requested) 143*a131d164SKaike Wan __field(u16, completed) 144*a131d164SKaike Wan __field(u8, curr) 145*a131d164SKaike Wan ), 146*a131d164SKaike Wan TP_fast_assign(/* assign */ 147*a131d164SKaike Wan struct hfi1_qp_priv *priv = qp->priv; 148*a131d164SKaike Wan 149*a131d164SKaike Wan DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)); 150*a131d164SKaike Wan __entry->qpn = qp->ibqp.qp_num; 151*a131d164SKaike Wan __entry->requested = priv->opfn.requested; 152*a131d164SKaike Wan __entry->completed = priv->opfn.completed; 153*a131d164SKaike Wan __entry->curr = priv->opfn.curr; 154*a131d164SKaike Wan ), 155*a131d164SKaike Wan TP_printk(/* print */ 156*a131d164SKaike Wan "[%s] qpn 0x%x requested 0x%x completed 0x%x curr 0x%x", 157*a131d164SKaike Wan __get_str(dev), 158*a131d164SKaike Wan __entry->qpn, 159*a131d164SKaike Wan __entry->requested, 160*a131d164SKaike Wan __entry->completed, 161*a131d164SKaike Wan __entry->curr 162*a131d164SKaike Wan ) 163*a131d164SKaike Wan ); 164*a131d164SKaike Wan 165*a131d164SKaike Wan DEFINE_EVENT(/* event */ 166*a131d164SKaike Wan hfi1_opfn_state_template, hfi1_opfn_state_conn_request, 167*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp), 168*a131d164SKaike Wan TP_ARGS(qp) 169*a131d164SKaike Wan ); 170*a131d164SKaike Wan 171*a131d164SKaike Wan DEFINE_EVENT(/* event */ 172*a131d164SKaike Wan hfi1_opfn_state_template, hfi1_opfn_state_sched_conn_request, 173*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp), 174*a131d164SKaike Wan TP_ARGS(qp) 175*a131d164SKaike Wan ); 176*a131d164SKaike Wan 177*a131d164SKaike Wan DEFINE_EVENT(/* event */ 178*a131d164SKaike Wan hfi1_opfn_state_template, hfi1_opfn_state_conn_response, 179*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp), 180*a131d164SKaike Wan TP_ARGS(qp) 181*a131d164SKaike Wan ); 182*a131d164SKaike Wan 183*a131d164SKaike Wan DEFINE_EVENT(/* event */ 184*a131d164SKaike Wan hfi1_opfn_state_template, hfi1_opfn_state_conn_reply, 185*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp), 186*a131d164SKaike Wan TP_ARGS(qp) 187*a131d164SKaike Wan ); 188*a131d164SKaike Wan 189*a131d164SKaike Wan DEFINE_EVENT(/* event */ 190*a131d164SKaike Wan hfi1_opfn_state_template, hfi1_opfn_state_conn_error, 191*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp), 192*a131d164SKaike Wan TP_ARGS(qp) 193*a131d164SKaike Wan ); 194*a131d164SKaike Wan 195*a131d164SKaike Wan DECLARE_EVENT_CLASS(/* opfn_data */ 196*a131d164SKaike Wan hfi1_opfn_data_template, 197*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp, u8 capcode, u64 data), 198*a131d164SKaike Wan TP_ARGS(qp, capcode, data), 199*a131d164SKaike Wan TP_STRUCT__entry(/* entry */ 200*a131d164SKaike Wan DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) 201*a131d164SKaike Wan __field(u32, qpn) 202*a131d164SKaike Wan __field(u32, state) 203*a131d164SKaike Wan __field(u8, capcode) 204*a131d164SKaike Wan __field(u64, data) 205*a131d164SKaike Wan ), 206*a131d164SKaike Wan TP_fast_assign(/* assign */ 207*a131d164SKaike Wan DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)); 208*a131d164SKaike Wan __entry->qpn = qp->ibqp.qp_num; 209*a131d164SKaike Wan __entry->state = qp->state; 210*a131d164SKaike Wan __entry->capcode = capcode; 211*a131d164SKaike Wan __entry->data = data; 212*a131d164SKaike Wan ), 213*a131d164SKaike Wan TP_printk(/* printk */ 214*a131d164SKaike Wan "[%s] qpn 0x%x (state 0x%x) Capcode %u data 0x%llx", 215*a131d164SKaike Wan __get_str(dev), 216*a131d164SKaike Wan __entry->qpn, 217*a131d164SKaike Wan __entry->state, 218*a131d164SKaike Wan __entry->capcode, 219*a131d164SKaike Wan __entry->data 220*a131d164SKaike Wan ) 221*a131d164SKaike Wan ); 222*a131d164SKaike Wan 223*a131d164SKaike Wan DEFINE_EVENT(/* event */ 224*a131d164SKaike Wan hfi1_opfn_data_template, hfi1_opfn_data_conn_request, 225*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp, u8 capcode, u64 data), 226*a131d164SKaike Wan TP_ARGS(qp, capcode, data) 227*a131d164SKaike Wan ); 228*a131d164SKaike Wan 229*a131d164SKaike Wan DEFINE_EVENT(/* event */ 230*a131d164SKaike Wan hfi1_opfn_data_template, hfi1_opfn_data_conn_response, 231*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp, u8 capcode, u64 data), 232*a131d164SKaike Wan TP_ARGS(qp, capcode, data) 233*a131d164SKaike Wan ); 234*a131d164SKaike Wan 235*a131d164SKaike Wan DEFINE_EVENT(/* event */ 236*a131d164SKaike Wan hfi1_opfn_data_template, hfi1_opfn_data_conn_reply, 237*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp, u8 capcode, u64 data), 238*a131d164SKaike Wan TP_ARGS(qp, capcode, data) 239*a131d164SKaike Wan ); 240*a131d164SKaike Wan 241*a131d164SKaike Wan DECLARE_EVENT_CLASS(/* opfn_param */ 242*a131d164SKaike Wan hfi1_opfn_param_template, 243*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp, char remote, 244*a131d164SKaike Wan struct tid_rdma_params *param), 245*a131d164SKaike Wan TP_ARGS(qp, remote, param), 246*a131d164SKaike Wan TP_STRUCT__entry(/* entry */ 247*a131d164SKaike Wan DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) 248*a131d164SKaike Wan __field(u32, qpn) 249*a131d164SKaike Wan __field(char, remote) 250*a131d164SKaike Wan __field(u32, param_qp) 251*a131d164SKaike Wan __field(u32, max_len) 252*a131d164SKaike Wan __field(u16, jkey) 253*a131d164SKaike Wan __field(u8, max_read) 254*a131d164SKaike Wan __field(u8, max_write) 255*a131d164SKaike Wan __field(u8, timeout) 256*a131d164SKaike Wan __field(u8, urg) 257*a131d164SKaike Wan ), 258*a131d164SKaike Wan TP_fast_assign(/* assign */ 259*a131d164SKaike Wan DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)); 260*a131d164SKaike Wan __entry->qpn = qp->ibqp.qp_num; 261*a131d164SKaike Wan __entry->remote = remote; 262*a131d164SKaike Wan __entry->param_qp = param->qp; 263*a131d164SKaike Wan __entry->max_len = param->max_len; 264*a131d164SKaike Wan __entry->jkey = param->jkey; 265*a131d164SKaike Wan __entry->max_read = param->max_read; 266*a131d164SKaike Wan __entry->max_write = param->max_write; 267*a131d164SKaike Wan __entry->timeout = param->timeout; 268*a131d164SKaike Wan __entry->urg = param->urg; 269*a131d164SKaike Wan ), 270*a131d164SKaike Wan TP_printk(/* print */ 271*a131d164SKaike Wan OPFN_PARAM_PRN, 272*a131d164SKaike Wan __get_str(dev), 273*a131d164SKaike Wan __entry->qpn, 274*a131d164SKaike Wan __entry->remote ? "remote" : "local", 275*a131d164SKaike Wan __entry->param_qp, 276*a131d164SKaike Wan __entry->max_read, 277*a131d164SKaike Wan __entry->max_write, 278*a131d164SKaike Wan __entry->max_len, 279*a131d164SKaike Wan __entry->jkey, 280*a131d164SKaike Wan __entry->timeout, 281*a131d164SKaike Wan __entry->urg 282*a131d164SKaike Wan ) 283*a131d164SKaike Wan ); 284*a131d164SKaike Wan 285*a131d164SKaike Wan DEFINE_EVENT(/* event */ 286*a131d164SKaike Wan hfi1_opfn_param_template, hfi1_opfn_param, 287*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp, char remote, 288*a131d164SKaike Wan struct tid_rdma_params *param), 289*a131d164SKaike Wan TP_ARGS(qp, remote, param) 290*a131d164SKaike Wan ); 291*a131d164SKaike Wan 292*a131d164SKaike Wan DECLARE_EVENT_CLASS(/* msg */ 293*a131d164SKaike Wan hfi1_msg_template, 294*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp, const char *msg, u64 more), 295*a131d164SKaike Wan TP_ARGS(qp, msg, more), 296*a131d164SKaike Wan TP_STRUCT__entry(/* entry */ 297*a131d164SKaike Wan __field(u32, qpn) 298*a131d164SKaike Wan __string(msg, msg) 299*a131d164SKaike Wan __field(u64, more) 300*a131d164SKaike Wan ), 301*a131d164SKaike Wan TP_fast_assign(/* assign */ 302*a131d164SKaike Wan __entry->qpn = qp ? qp->ibqp.qp_num : 0; 303*a131d164SKaike Wan __assign_str(msg, msg); 304*a131d164SKaike Wan __entry->more = more; 305*a131d164SKaike Wan ), 306*a131d164SKaike Wan TP_printk(/* print */ 307*a131d164SKaike Wan "qpn 0x%x %s 0x%llx", 308*a131d164SKaike Wan __entry->qpn, 309*a131d164SKaike Wan __get_str(msg), 310*a131d164SKaike Wan __entry->more 311*a131d164SKaike Wan ) 312*a131d164SKaike Wan ); 313*a131d164SKaike Wan 314*a131d164SKaike Wan DEFINE_EVENT(/* event */ 315*a131d164SKaike Wan hfi1_msg_template, hfi1_msg_opfn_conn_request, 316*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp, const char *msg, u64 more), 317*a131d164SKaike Wan TP_ARGS(qp, msg, more) 318*a131d164SKaike Wan ); 319*a131d164SKaike Wan 320*a131d164SKaike Wan DEFINE_EVENT(/* event */ 321*a131d164SKaike Wan hfi1_msg_template, hfi1_msg_opfn_conn_error, 322*a131d164SKaike Wan TP_PROTO(struct rvt_qp *qp, const char *msg, u64 more), 323*a131d164SKaike Wan TP_ARGS(qp, msg, more) 324*a131d164SKaike Wan ); 325*a131d164SKaike Wan 326*a131d164SKaike Wan #endif /* __HFI1_TRACE_TID_H */ 327*a131d164SKaike Wan 328*a131d164SKaike Wan #undef TRACE_INCLUDE_PATH 329*a131d164SKaike Wan #undef TRACE_INCLUDE_FILE 330*a131d164SKaike Wan #define TRACE_INCLUDE_PATH . 331*a131d164SKaike Wan #define TRACE_INCLUDE_FILE trace_tid 332*a131d164SKaike Wan #include <trace/define_trace.h> 333