brintos

brintos / linux-shallow public Read only

0
0
Text · 7.0 KiB · 17642aa Raw
395 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Trace point definitions for core RDMA functions.4 *5 * Author: Chuck Lever <chuck.lever@oracle.com>6 *7 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.8 */9 10#undef TRACE_SYSTEM11#define TRACE_SYSTEM rdma_core12 13#if !defined(_TRACE_RDMA_CORE_H) || defined(TRACE_HEADER_MULTI_READ)14#define _TRACE_RDMA_CORE_H15 16#include <linux/tracepoint.h>17#include <rdma/ib_verbs.h>18 19/*20 * enum ib_poll_context, from include/rdma/ib_verbs.h21 */22#define IB_POLL_CTX_LIST			\23	ib_poll_ctx(DIRECT)			\24	ib_poll_ctx(SOFTIRQ)			\25	ib_poll_ctx(WORKQUEUE)			\26	ib_poll_ctx_end(UNBOUND_WORKQUEUE)27 28#undef ib_poll_ctx29#undef ib_poll_ctx_end30 31#define ib_poll_ctx(x)		TRACE_DEFINE_ENUM(IB_POLL_##x);32#define ib_poll_ctx_end(x)	TRACE_DEFINE_ENUM(IB_POLL_##x);33 34IB_POLL_CTX_LIST35 36#undef ib_poll_ctx37#undef ib_poll_ctx_end38 39#define ib_poll_ctx(x)		{ IB_POLL_##x, #x },40#define ib_poll_ctx_end(x)	{ IB_POLL_##x, #x }41 42#define rdma_show_ib_poll_ctx(x) \43		__print_symbolic(x, IB_POLL_CTX_LIST)44 45/**46 ** Completion Queue events47 **/48 49TRACE_EVENT(cq_schedule,50	TP_PROTO(51		struct ib_cq *cq52	),53 54	TP_ARGS(cq),55 56	TP_STRUCT__entry(57		__field(u32, cq_id)58	),59 60	TP_fast_assign(61		cq->timestamp = ktime_get();62		cq->interrupt = true;63 64		__entry->cq_id = cq->res.id;65	),66 67	TP_printk("cq.id=%u", __entry->cq_id)68);69 70TRACE_EVENT(cq_reschedule,71	TP_PROTO(72		struct ib_cq *cq73	),74 75	TP_ARGS(cq),76 77	TP_STRUCT__entry(78		__field(u32, cq_id)79	),80 81	TP_fast_assign(82		cq->timestamp = ktime_get();83		cq->interrupt = false;84 85		__entry->cq_id = cq->res.id;86	),87 88	TP_printk("cq.id=%u", __entry->cq_id)89);90 91TRACE_EVENT(cq_process,92	TP_PROTO(93		const struct ib_cq *cq94	),95 96	TP_ARGS(cq),97 98	TP_STRUCT__entry(99		__field(u32, cq_id)100		__field(bool, interrupt)101		__field(s64, latency)102	),103 104	TP_fast_assign(105		ktime_t latency = ktime_sub(ktime_get(), cq->timestamp);106 107		__entry->cq_id = cq->res.id;108		__entry->latency = ktime_to_us(latency);109		__entry->interrupt = cq->interrupt;110	),111 112	TP_printk("cq.id=%u wake-up took %lld [us] from %s",113		__entry->cq_id, __entry->latency,114		__entry->interrupt ? "interrupt" : "reschedule"115	)116);117 118TRACE_EVENT(cq_poll,119	TP_PROTO(120		const struct ib_cq *cq,121		int requested,122		int rc123	),124 125	TP_ARGS(cq, requested, rc),126 127	TP_STRUCT__entry(128		__field(u32, cq_id)129		__field(int, requested)130		__field(int, rc)131	),132 133	TP_fast_assign(134		__entry->cq_id = cq->res.id;135		__entry->requested = requested;136		__entry->rc = rc;137	),138 139	TP_printk("cq.id=%u requested %d, returned %d",140		__entry->cq_id, __entry->requested, __entry->rc141	)142);143 144TRACE_EVENT(cq_drain_complete,145	TP_PROTO(146		const struct ib_cq *cq147	),148 149	TP_ARGS(cq),150 151	TP_STRUCT__entry(152		__field(u32, cq_id)153	),154 155	TP_fast_assign(156		__entry->cq_id = cq->res.id;157	),158 159	TP_printk("cq.id=%u",160		__entry->cq_id161	)162);163 164 165TRACE_EVENT(cq_modify,166	TP_PROTO(167		const struct ib_cq *cq,168		u16 comps,169		u16 usec170	),171 172	TP_ARGS(cq, comps, usec),173 174	TP_STRUCT__entry(175		__field(u32, cq_id)176		__field(unsigned int, comps)177		__field(unsigned int, usec)178	),179 180	TP_fast_assign(181		__entry->cq_id = cq->res.id;182		__entry->comps = comps;183		__entry->usec = usec;184	),185 186	TP_printk("cq.id=%u comps=%u usec=%u",187		__entry->cq_id, __entry->comps, __entry->usec188	)189);190 191TRACE_EVENT(cq_alloc,192	TP_PROTO(193		const struct ib_cq *cq,194		int nr_cqe,195		int comp_vector,196		enum ib_poll_context poll_ctx197	),198 199	TP_ARGS(cq, nr_cqe, comp_vector, poll_ctx),200 201	TP_STRUCT__entry(202		__field(u32, cq_id)203		__field(int, nr_cqe)204		__field(int, comp_vector)205		__field(unsigned long, poll_ctx)206	),207 208	TP_fast_assign(209		__entry->cq_id = cq->res.id;210		__entry->nr_cqe = nr_cqe;211		__entry->comp_vector = comp_vector;212		__entry->poll_ctx = poll_ctx;213	),214 215	TP_printk("cq.id=%u nr_cqe=%d comp_vector=%d poll_ctx=%s",216		__entry->cq_id, __entry->nr_cqe, __entry->comp_vector,217		rdma_show_ib_poll_ctx(__entry->poll_ctx)218	)219);220 221TRACE_EVENT(cq_alloc_error,222	TP_PROTO(223		int nr_cqe,224		int comp_vector,225		enum ib_poll_context poll_ctx,226		int rc227	),228 229	TP_ARGS(nr_cqe, comp_vector, poll_ctx, rc),230 231	TP_STRUCT__entry(232		__field(int, rc)233		__field(int, nr_cqe)234		__field(int, comp_vector)235		__field(unsigned long, poll_ctx)236	),237 238	TP_fast_assign(239		__entry->rc = rc;240		__entry->nr_cqe = nr_cqe;241		__entry->comp_vector = comp_vector;242		__entry->poll_ctx = poll_ctx;243	),244 245	TP_printk("nr_cqe=%d comp_vector=%d poll_ctx=%s rc=%d",246		__entry->nr_cqe, __entry->comp_vector,247		rdma_show_ib_poll_ctx(__entry->poll_ctx), __entry->rc248	)249);250 251TRACE_EVENT(cq_free,252	TP_PROTO(253		const struct ib_cq *cq254	),255 256	TP_ARGS(cq),257 258	TP_STRUCT__entry(259		__field(u32, cq_id)260	),261 262	TP_fast_assign(263		__entry->cq_id = cq->res.id;264	),265 266	TP_printk("cq.id=%u", __entry->cq_id)267);268 269/**270 ** Memory Region events271 **/272 273/*274 * enum ib_mr_type, from include/rdma/ib_verbs.h275 */276#define IB_MR_TYPE_LIST				\277	ib_mr_type_item(MEM_REG)		\278	ib_mr_type_item(SG_GAPS)		\279	ib_mr_type_item(DM)			\280	ib_mr_type_item(USER)			\281	ib_mr_type_item(DMA)			\282	ib_mr_type_end(INTEGRITY)283 284#undef ib_mr_type_item285#undef ib_mr_type_end286 287#define ib_mr_type_item(x)	TRACE_DEFINE_ENUM(IB_MR_TYPE_##x);288#define ib_mr_type_end(x)	TRACE_DEFINE_ENUM(IB_MR_TYPE_##x);289 290IB_MR_TYPE_LIST291 292#undef ib_mr_type_item293#undef ib_mr_type_end294 295#define ib_mr_type_item(x)	{ IB_MR_TYPE_##x, #x },296#define ib_mr_type_end(x)	{ IB_MR_TYPE_##x, #x }297 298#define rdma_show_ib_mr_type(x) \299		__print_symbolic(x, IB_MR_TYPE_LIST)300 301TRACE_EVENT(mr_alloc,302	TP_PROTO(303		const struct ib_pd *pd,304		enum ib_mr_type mr_type,305		u32 max_num_sg,306		const struct ib_mr *mr307	),308 309	TP_ARGS(pd, mr_type, max_num_sg, mr),310 311	TP_STRUCT__entry(312		__field(u32, pd_id)313		__field(u32, mr_id)314		__field(u32, max_num_sg)315		__field(int, rc)316		__field(unsigned long, mr_type)317	),318 319	TP_fast_assign(320		__entry->pd_id = pd->res.id;321		if (IS_ERR(mr)) {322			__entry->mr_id = 0;323			__entry->rc = PTR_ERR(mr);324		} else {325			__entry->mr_id = mr->res.id;326			__entry->rc = 0;327		}328		__entry->max_num_sg = max_num_sg;329		__entry->mr_type = mr_type;330	),331 332	TP_printk("pd.id=%u mr.id=%u type=%s max_num_sg=%u rc=%d",333		__entry->pd_id, __entry->mr_id,334		rdma_show_ib_mr_type(__entry->mr_type),335		__entry->max_num_sg, __entry->rc)336);337 338TRACE_EVENT(mr_integ_alloc,339	TP_PROTO(340		const struct ib_pd *pd,341		u32 max_num_data_sg,342		u32 max_num_meta_sg,343		const struct ib_mr *mr344	),345 346	TP_ARGS(pd, max_num_data_sg, max_num_meta_sg, mr),347 348	TP_STRUCT__entry(349		__field(u32, pd_id)350		__field(u32, mr_id)351		__field(u32, max_num_data_sg)352		__field(u32, max_num_meta_sg)353		__field(int, rc)354	),355 356	TP_fast_assign(357		__entry->pd_id = pd->res.id;358		if (IS_ERR(mr)) {359			__entry->mr_id = 0;360			__entry->rc = PTR_ERR(mr);361		} else {362			__entry->mr_id = mr->res.id;363			__entry->rc = 0;364		}365		__entry->max_num_data_sg = max_num_data_sg;366		__entry->max_num_meta_sg = max_num_meta_sg;367	),368 369	TP_printk("pd.id=%u mr.id=%u max_num_data_sg=%u max_num_meta_sg=%u rc=%d",370		__entry->pd_id, __entry->mr_id, __entry->max_num_data_sg,371		__entry->max_num_meta_sg, __entry->rc)372);373 374TRACE_EVENT(mr_dereg,375	TP_PROTO(376		const struct ib_mr *mr377	),378 379	TP_ARGS(mr),380 381	TP_STRUCT__entry(382		__field(u32, id)383	),384 385	TP_fast_assign(386		__entry->id = mr->res.id;387	),388 389	TP_printk("mr.id=%u", __entry->id)390);391 392#endif /* _TRACE_RDMA_CORE_H */393 394#include <trace/define_trace.h>395