0001
0002
0003
0004
0005 #if !defined(__RVT_TRACE_MR_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define __RVT_TRACE_MR_H
0007
0008 #include <linux/tracepoint.h>
0009 #include <linux/trace_seq.h>
0010
0011 #include <rdma/ib_verbs.h>
0012 #include <rdma/rdma_vt.h>
0013 #include <rdma/rdmavt_mr.h>
0014
0015 #include "mr.h"
0016
0017 #undef TRACE_SYSTEM
0018 #define TRACE_SYSTEM rvt_mr
0019 DECLARE_EVENT_CLASS(
0020 rvt_mr_template,
0021 TP_PROTO(struct rvt_mregion *mr, u16 m, u16 n, void *v, size_t len),
0022 TP_ARGS(mr, m, n, v, len),
0023 TP_STRUCT__entry(
0024 RDI_DEV_ENTRY(ib_to_rvt(mr->pd->device))
0025 __field(void *, vaddr)
0026 __field(struct page *, page)
0027 __field(u64, iova)
0028 __field(u64, user_base)
0029 __field(size_t, len)
0030 __field(size_t, length)
0031 __field(u32, lkey)
0032 __field(u32, offset)
0033 __field(u16, m)
0034 __field(u16, n)
0035 ),
0036 TP_fast_assign(
0037 RDI_DEV_ASSIGN(ib_to_rvt(mr->pd->device));
0038 __entry->vaddr = v;
0039 __entry->page = virt_to_page(v);
0040 __entry->iova = mr->iova;
0041 __entry->user_base = mr->user_base;
0042 __entry->lkey = mr->lkey;
0043 __entry->m = m;
0044 __entry->n = n;
0045 __entry->len = len;
0046 __entry->length = mr->length;
0047 __entry->offset = mr->offset;
0048 ),
0049 TP_printk(
0050 "[%s] lkey %x iova %llx user_base %llx mr_len %lu vaddr %llx page %p m %u n %u len %lu off %u",
0051 __get_str(dev),
0052 __entry->lkey,
0053 __entry->iova,
0054 __entry->user_base,
0055 __entry->length,
0056 (unsigned long long)__entry->vaddr,
0057 __entry->page,
0058 __entry->m,
0059 __entry->n,
0060 __entry->len,
0061 __entry->offset
0062 )
0063 );
0064
0065 DEFINE_EVENT(
0066 rvt_mr_template, rvt_mr_page_seg,
0067 TP_PROTO(struct rvt_mregion *mr, u16 m, u16 n, void *v, size_t len),
0068 TP_ARGS(mr, m, n, v, len));
0069
0070 DEFINE_EVENT(
0071 rvt_mr_template, rvt_mr_fmr_seg,
0072 TP_PROTO(struct rvt_mregion *mr, u16 m, u16 n, void *v, size_t len),
0073 TP_ARGS(mr, m, n, v, len));
0074
0075 DEFINE_EVENT(
0076 rvt_mr_template, rvt_mr_user_seg,
0077 TP_PROTO(struct rvt_mregion *mr, u16 m, u16 n, void *v, size_t len),
0078 TP_ARGS(mr, m, n, v, len));
0079
0080 DECLARE_EVENT_CLASS(
0081 rvt_sge_template,
0082 TP_PROTO(struct rvt_sge *sge, struct ib_sge *isge),
0083 TP_ARGS(sge, isge),
0084 TP_STRUCT__entry(
0085 RDI_DEV_ENTRY(ib_to_rvt(sge->mr->pd->device))
0086 __field(struct rvt_mregion *, mr)
0087 __field(struct rvt_sge *, sge)
0088 __field(struct ib_sge *, isge)
0089 __field(void *, vaddr)
0090 __field(u64, ivaddr)
0091 __field(u32, lkey)
0092 __field(u32, sge_length)
0093 __field(u32, length)
0094 __field(u32, ilength)
0095 __field(int, user)
0096 __field(u16, m)
0097 __field(u16, n)
0098 ),
0099 TP_fast_assign(
0100 RDI_DEV_ASSIGN(ib_to_rvt(sge->mr->pd->device));
0101 __entry->mr = sge->mr;
0102 __entry->sge = sge;
0103 __entry->isge = isge;
0104 __entry->vaddr = sge->vaddr;
0105 __entry->ivaddr = isge->addr;
0106 __entry->lkey = sge->mr->lkey;
0107 __entry->sge_length = sge->sge_length;
0108 __entry->length = sge->length;
0109 __entry->ilength = isge->length;
0110 __entry->m = sge->m;
0111 __entry->n = sge->m;
0112 __entry->user = ibpd_to_rvtpd(sge->mr->pd)->user;
0113 ),
0114 TP_printk(
0115 "[%s] mr %p sge %p isge %p vaddr %p ivaddr %llx lkey %x sge_length %u length %u ilength %u m %u n %u user %u",
0116 __get_str(dev),
0117 __entry->mr,
0118 __entry->sge,
0119 __entry->isge,
0120 __entry->vaddr,
0121 __entry->ivaddr,
0122 __entry->lkey,
0123 __entry->sge_length,
0124 __entry->length,
0125 __entry->ilength,
0126 __entry->m,
0127 __entry->n,
0128 __entry->user
0129 )
0130 );
0131
0132 DEFINE_EVENT(
0133 rvt_sge_template, rvt_sge_adjacent,
0134 TP_PROTO(struct rvt_sge *sge, struct ib_sge *isge),
0135 TP_ARGS(sge, isge));
0136
0137 DEFINE_EVENT(
0138 rvt_sge_template, rvt_sge_new,
0139 TP_PROTO(struct rvt_sge *sge, struct ib_sge *isge),
0140 TP_ARGS(sge, isge));
0141
0142 TRACE_EVENT(
0143 rvt_map_mr_sg,
0144 TP_PROTO(struct ib_mr *ibmr, int sg_nents, unsigned int *sg_offset),
0145 TP_ARGS(ibmr, sg_nents, sg_offset),
0146 TP_STRUCT__entry(
0147 RDI_DEV_ENTRY(ib_to_rvt(to_imr(ibmr)->mr.pd->device))
0148 __field(u64, iova)
0149 __field(u64, ibmr_iova)
0150 __field(u64, user_base)
0151 __field(u64, ibmr_length)
0152 __field(int, sg_nents)
0153 __field(uint, sg_offset)
0154 ),
0155 TP_fast_assign(
0156 RDI_DEV_ASSIGN(ib_to_rvt(to_imr(ibmr)->mr.pd->device));
0157 __entry->ibmr_iova = ibmr->iova;
0158 __entry->iova = to_imr(ibmr)->mr.iova;
0159 __entry->user_base = to_imr(ibmr)->mr.user_base;
0160 __entry->ibmr_length = to_imr(ibmr)->mr.length;
0161 __entry->sg_nents = sg_nents;
0162 __entry->sg_offset = sg_offset ? *sg_offset : 0;
0163 ),
0164 TP_printk(
0165 "[%s] ibmr_iova %llx iova %llx user_base %llx length %llx sg_nents %d sg_offset %u",
0166 __get_str(dev),
0167 __entry->ibmr_iova,
0168 __entry->iova,
0169 __entry->user_base,
0170 __entry->ibmr_length,
0171 __entry->sg_nents,
0172 __entry->sg_offset
0173 )
0174 );
0175
0176 #endif
0177
0178 #undef TRACE_INCLUDE_PATH
0179 #undef TRACE_INCLUDE_FILE
0180 #define TRACE_INCLUDE_PATH .
0181 #define TRACE_INCLUDE_FILE trace_mr
0182 #include <trace/define_trace.h>