mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
RDMA/hns: Add trace for WQE dumping
Add trace for WQE dumping, including SQ, RQ and SRQ. Output example: $ cat /sys/kernel/debug/tracing/trace tracer: nop entries-in-buffer/entries-written: 2/2 #P:128 _-----=> irqs-off/BH-disabled / _----=> need-resched | / _---=> hardirq/softirq || / _--=> preempt-depth ||| / _-=> migrate-disable |||| / delay TASK-PID CPU# ||||| TIMESTAMP FUNCTION | | | ||||| | | roce_test_main-22730 [074] d..1. 16133.898282: hns_sq_wqe: SQ 0xc wqe (0x0/0xffff0820a6076060): {0x180,0x639c,0x0,0x1000000,0x0,0x0,0x0,0x0, 0x639c,0x300,0xf7e38000,0x0,0x0,0x0,0x0,0x0} Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com> Link: https://patch.msgid.link/20250421132750.1363348-3-huangjunxian6@hisilicon.com Signed-off-by: Leon Romanovsky <leon@kernel.org>
This commit is contained in:
parent
02007e3ddc
commit
6c98c86708
3 changed files with 55 additions and 0 deletions
|
@ -1030,6 +1030,7 @@ struct hns_roce_dev {
|
|||
enum hns_roce_trace_type {
|
||||
TRACE_SQ,
|
||||
TRACE_RQ,
|
||||
TRACE_SRQ,
|
||||
};
|
||||
|
||||
static inline const char *trace_type_to_str(enum hns_roce_trace_type type)
|
||||
|
@ -1039,6 +1040,8 @@ static inline const char *trace_type_to_str(enum hns_roce_trace_type type)
|
|||
return "SQ";
|
||||
case TRACE_RQ:
|
||||
return "RQ";
|
||||
case TRACE_SRQ:
|
||||
return "SRQ";
|
||||
default:
|
||||
return "UNKNOWN";
|
||||
}
|
||||
|
|
|
@ -741,6 +741,8 @@ static int hns_roce_v2_post_send(struct ib_qp *ibqp,
|
|||
else
|
||||
ret = set_ud_wqe(qp, wr, wqe, &sge_idx, owner_bit);
|
||||
|
||||
trace_hns_sq_wqe(qp->qpn, wqe_idx, wqe, 1 << qp->sq.wqe_shift,
|
||||
wr->wr_id, TRACE_SQ);
|
||||
if (unlikely(ret)) {
|
||||
*bad_wr = wr;
|
||||
goto out;
|
||||
|
@ -810,6 +812,9 @@ static void fill_rq_wqe(struct hns_roce_qp *hr_qp, const struct ib_recv_wr *wr,
|
|||
|
||||
wqe = hns_roce_get_recv_wqe(hr_qp, wqe_idx);
|
||||
fill_recv_sge_to_wqe(wr, wqe, max_sge, hr_qp->rq.rsv_sge);
|
||||
|
||||
trace_hns_rq_wqe(hr_qp->qpn, wqe_idx, wqe, 1 << hr_qp->rq.wqe_shift,
|
||||
wr->wr_id, TRACE_RQ);
|
||||
}
|
||||
|
||||
static int hns_roce_v2_post_recv(struct ib_qp *ibqp,
|
||||
|
@ -987,6 +992,9 @@ static int hns_roce_v2_post_srq_recv(struct ib_srq *ibsrq,
|
|||
fill_recv_sge_to_wqe(wr, wqe, max_sge, srq->rsv_sge);
|
||||
fill_wqe_idx(srq, wqe_idx);
|
||||
srq->wrid[wqe_idx] = wr->wr_id;
|
||||
|
||||
trace_hns_srq_wqe(srq->srqn, wqe_idx, wqe, 1 << srq->wqe_shift,
|
||||
wr->wr_id, TRACE_SRQ);
|
||||
}
|
||||
|
||||
if (likely(nreq)) {
|
||||
|
|
|
@ -41,6 +41,50 @@ DEFINE_EVENT(flush_head_template, hns_rq_flush_cqe,
|
|||
enum hns_roce_trace_type type),
|
||||
TP_ARGS(qpn, pi, type));
|
||||
|
||||
#define MAX_SGE_PER_WQE 64
|
||||
#define MAX_WQE_SIZE (MAX_SGE_PER_WQE * HNS_ROCE_SGE_SIZE)
|
||||
DECLARE_EVENT_CLASS(wqe_template,
|
||||
TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len,
|
||||
u64 id, enum hns_roce_trace_type type),
|
||||
TP_ARGS(qpn, idx, wqe, len, id, type),
|
||||
|
||||
TP_STRUCT__entry(__field(unsigned long, qpn)
|
||||
__field(u32, idx)
|
||||
__array(__le32, wqe,
|
||||
MAX_WQE_SIZE / sizeof(__le32))
|
||||
__field(u32, len)
|
||||
__field(u64, id)
|
||||
__field(enum hns_roce_trace_type, type)
|
||||
),
|
||||
|
||||
TP_fast_assign(__entry->qpn = qpn;
|
||||
__entry->idx = idx;
|
||||
__entry->id = id;
|
||||
memcpy(__entry->wqe, wqe, len);
|
||||
__entry->len = len / sizeof(__le32);
|
||||
__entry->type = type;
|
||||
),
|
||||
|
||||
TP_printk("%s 0x%lx wqe(0x%x/0x%llx): %s",
|
||||
trace_type_to_str(__entry->type),
|
||||
__entry->qpn, __entry->idx, __entry->id,
|
||||
__print_array(__entry->wqe, __entry->len,
|
||||
sizeof(__le32)))
|
||||
);
|
||||
|
||||
DEFINE_EVENT(wqe_template, hns_sq_wqe,
|
||||
TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, u64 id,
|
||||
enum hns_roce_trace_type type),
|
||||
TP_ARGS(qpn, idx, wqe, len, id, type));
|
||||
DEFINE_EVENT(wqe_template, hns_rq_wqe,
|
||||
TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, u64 id,
|
||||
enum hns_roce_trace_type type),
|
||||
TP_ARGS(qpn, idx, wqe, len, id, type));
|
||||
DEFINE_EVENT(wqe_template, hns_srq_wqe,
|
||||
TP_PROTO(unsigned long qpn, u32 idx, void *wqe, u32 len, u64 id,
|
||||
enum hns_roce_trace_type type),
|
||||
TP_ARGS(qpn, idx, wqe, len, id, type));
|
||||
|
||||
#endif /* __HNS_ROCE_TRACE_H */
|
||||
|
||||
#undef TRACE_INCLUDE_FILE
|
||||
|
|
Loading…
Add table
Reference in a new issue