File Index
Files and directories
Sign in
FILE

hns_roce_trace.h

File preview with syntax highlighting.

linux-6.19.14/drivers/infiniband/hw/hns/hns_roce_trace.h C
  1/* SPDX-License-Identifier: GPL-2.0+ */
  2/*
  3 * Copyright (c) 2025 Hisilicon Limited.
  4 */
  5
  6#undef TRACE_SYSTEM
  7#define TRACE_SYSTEM hns_roce
  8
  9#if !defined(__HNS_ROCE_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
 10#define __HNS_ROCE_TRACE_H
 11
 12#include <linux/tracepoint.h>
 13#include <linux/string_choices.h>
 14#include "hns_roce_device.h"
 15#include "hns_roce_hw_v2.h"
 16
 17DECLARE_EVENT_CLASS(flush_head_template,
 18		    TP_PROTO(unsigned long qpn, u32 pi,
 19			     enum hns_roce_trace_type type),
 20		    TP_ARGS(qpn, pi, type),
 21
 22		    TP_STRUCT__entry(__field(unsigned long, qpn)
 23				     __field(u32, pi)
 24				     __field(enum hns_roce_trace_type, type)
 25		    ),
 26
 27		    TP_fast_assign(__entry->qpn = qpn;
 28				   __entry->pi = pi;
 29				   __entry->type = type;
 30		    ),
 31
 32		    TP_printk("%s 0x%lx flush head 0x%x.",
 33			      trace_type_to_str(__entry->type),
 34			      __entry->qpn, __entry->pi)
 35);
 36
 37DEFINE_EVENT(flush_head_template, hns_sq_flush_cqe,
 38	     TP_PROTO(unsigned long qpn, u32 pi,
 39		      enum hns_roce_trace_type type),
 40	     TP_ARGS(qpn, pi, type));
 41DEFINE_EVENT(flush_head_template, hns_rq_flush_cqe,
 42	     TP_PROTO(unsigned long qpn, u32 pi,
 43		      enum hns_roce_trace_type type),
 44	     TP_ARGS(qpn, pi, type));
 45
 46#define MAX_SGE_PER_WQE 64
 47#define MAX_WQE_SIZE (MAX_SGE_PER_WQE * HNS_ROCE_SGE_SIZE)
 48DECLARE_EVENT_CLASS(wqe_template,
 49		    TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len,
 50			     u64 id, enum hns_roce_trace_type type),
 51		    TP_ARGS(qpn, idx, wqe, len, id, type),
 52
 53		    TP_STRUCT__entry(__field(unsigned long, qpn)
 54				     __field(u32, idx)
 55				     __array(u32, wqe,
 56					     MAX_WQE_SIZE / sizeof(__le32))
 57				     __field(u32, len)
 58				     __field(u64, id)
 59				     __field(enum hns_roce_trace_type, type)
 60				     ),
 61
 62		    TP_fast_assign(__entry->qpn = qpn;
 63				   __entry->idx = idx;
 64				   __entry->id = id;
 65				   __entry->len = len / sizeof(__le32);
 66				   __entry->type = type;
 67				   for (int i = 0; i < __entry->len; i++)
 68					__entry->wqe[i] = le32_to_cpu(((__le32 *)wqe)[i]);
 69				   ),
 70
 71		    TP_printk("%s 0x%lx wqe(0x%x/0x%llx): %s",
 72			      trace_type_to_str(__entry->type),
 73			      __entry->qpn, __entry->idx, __entry->id,
 74			      __print_array(__entry->wqe, __entry->len,
 75					    sizeof(__le32)))
 76);
 77
 78DEFINE_EVENT(wqe_template, hns_sq_wqe,
 79	     TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, u64 id,
 80		      enum hns_roce_trace_type type),
 81	     TP_ARGS(qpn, idx, wqe, len, id, type));
 82DEFINE_EVENT(wqe_template, hns_rq_wqe,
 83	     TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, u64 id,
 84		      enum hns_roce_trace_type type),
 85	     TP_ARGS(qpn, idx, wqe, len, id, type));
 86DEFINE_EVENT(wqe_template, hns_srq_wqe,
 87	     TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, u64 id,
 88		      enum hns_roce_trace_type type),
 89	     TP_ARGS(qpn, idx, wqe, len, id, type));
 90
 91TRACE_EVENT(hns_ae_info,
 92	    TP_PROTO(int event_type, void *aeqe, unsigned int len),
 93	    TP_ARGS(event_type, aeqe, len),
 94
 95	    TP_STRUCT__entry(__field(int, event_type)
 96			     __array(u32, aeqe,
 97				     HNS_ROCE_V3_EQE_SIZE / sizeof(__le32))
 98			     __field(u32, len)
 99	    ),
100
101	    TP_fast_assign(__entry->event_type = event_type;
102			   __entry->len = len / sizeof(__le32);
103			   for (int i = 0; i < __entry->len; i++)
104				__entry->aeqe[i] = le32_to_cpu(((__le32 *)aeqe)[i]);
105	    ),
106
107	    TP_printk("event %2d aeqe: %s", __entry->event_type,
108		      __print_array(__entry->aeqe, __entry->len, sizeof(__le32)))
109);
110
111TRACE_EVENT(hns_mr,
112	    TP_PROTO(struct hns_roce_mr *mr),
113	    TP_ARGS(mr),
114
115	    TP_STRUCT__entry(__field(u64, iova)
116			     __field(u64, size)
117			     __field(u32, key)
118			     __field(u32, pd)
119			     __field(u32, pbl_hop_num)
120			     __field(u32, npages)
121			     __field(int, type)
122			     __field(int, enabled)
123	    ),
124
125	    TP_fast_assign(__entry->iova = mr->iova;
126			   __entry->size = mr->size;
127			   __entry->key = mr->key;
128			   __entry->pd = mr->pd;
129			   __entry->pbl_hop_num = mr->pbl_hop_num;
130			   __entry->npages = mr->npages;
131			   __entry->type = mr->type;
132			   __entry->enabled = mr->enabled;
133	    ),
134
135	    TP_printk("iova:0x%llx, size:%llu, key:%u, pd:%u, pbl_hop:%u, npages:%u, type:%d, status:%d",
136		      __entry->iova, __entry->size, __entry->key,
137		      __entry->pd, __entry->pbl_hop_num, __entry->npages,
138		      __entry->type, __entry->enabled)
139);
140
141TRACE_EVENT(hns_buf_attr,
142	    TP_PROTO(struct hns_roce_buf_attr *attr),
143	    TP_ARGS(attr),
144
145	    TP_STRUCT__entry(__field(unsigned int, region_count)
146			     __field(unsigned int, region0_size)
147			     __field(int, region0_hopnum)
148			     __field(unsigned int, region1_size)
149			     __field(int, region1_hopnum)
150			     __field(unsigned int, region2_size)
151			     __field(int, region2_hopnum)
152			     __field(unsigned int, page_shift)
153			     __field(bool, mtt_only)
154	    ),
155
156	    TP_fast_assign(__entry->region_count = attr->region_count;
157			   __entry->region0_size = attr->region[0].size;
158			   __entry->region0_hopnum = attr->region[0].hopnum;
159			   __entry->region1_size = attr->region[1].size;
160			   __entry->region1_hopnum = attr->region[1].hopnum;
161			   __entry->region2_size = attr->region[2].size;
162			   __entry->region2_hopnum = attr->region[2].hopnum;
163			   __entry->page_shift = attr->page_shift;
164			   __entry->mtt_only = attr->mtt_only;
165	    ),
166
167	    TP_printk("rg cnt:%u, pg_sft:0x%x, mtt_only:%s, rg 0 (sz:%u, hop:%u), rg 1 (sz:%u, hop:%u), rg 2 (sz:%u, hop:%u)\n",
168		      __entry->region_count, __entry->page_shift,
169		      str_yes_no(__entry->mtt_only),
170		      __entry->region0_size, __entry->region0_hopnum,
171		      __entry->region1_size, __entry->region1_hopnum,
172		      __entry->region2_size, __entry->region2_hopnum)
173);
174
175DECLARE_EVENT_CLASS(cmdq,
176		    TP_PROTO(struct hns_roce_dev *hr_dev,
177			     struct hns_roce_cmq_desc *desc),
178		    TP_ARGS(hr_dev, desc),
179
180		    TP_STRUCT__entry(__string(dev_name, dev_name(hr_dev->dev))
181				     __field(u16, opcode)
182				     __field(u16, flag)
183				     __field(u16, retval)
184				     __array(u32, data, 6)
185		    ),
186
187		    TP_fast_assign(__assign_str(dev_name);
188				   __entry->opcode = le16_to_cpu(desc->opcode);
189				   __entry->flag = le16_to_cpu(desc->flag);
190				   __entry->retval = le16_to_cpu(desc->retval);
191				   for (int i = 0; i < 6; i++)
192					__entry->data[i] = le32_to_cpu(desc->data[i]);
193		    ),
194
195		    TP_printk("%s cmdq opcode:0x%x, flag:0x%x, retval:0x%x, data:%s\n",
196			      __get_str(dev_name), __entry->opcode,
197			      __entry->flag, __entry->retval,
198			      __print_array(__entry->data, 6, sizeof(__le32)))
199);
200
201DEFINE_EVENT(cmdq, hns_cmdq_req,
202	     TP_PROTO(struct hns_roce_dev *hr_dev,
203		      struct hns_roce_cmq_desc *desc),
204	     TP_ARGS(hr_dev, desc));
205DEFINE_EVENT(cmdq, hns_cmdq_resp,
206	     TP_PROTO(struct hns_roce_dev *hr_dev,
207		      struct hns_roce_cmq_desc *desc),
208	     TP_ARGS(hr_dev, desc));
209
210#endif /* __HNS_ROCE_TRACE_H */
211
212#undef TRACE_INCLUDE_FILE
213#define TRACE_INCLUDE_FILE hns_roce_trace
214#undef TRACE_INCLUDE_PATH
215#define TRACE_INCLUDE_PATH .
216#include <trace/define_trace.h>
~/ Read-only file preview.