Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
0002 /*
0003  * Copyright(c) 2016 Intel Corporation.
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 /* __RVT_TRACE_MR_H */
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>