xref: /openbmc/linux/drivers/block/rnbd/rnbd-srv-trace.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1*74e237b6SSantosh Pradhan /* SPDX-License-Identifier: GPL-2.0+ */
2*74e237b6SSantosh Pradhan /*
3*74e237b6SSantosh Pradhan  * RDMA Network Block Driver
4*74e237b6SSantosh Pradhan  *
5*74e237b6SSantosh Pradhan  * Copyright (c) 2022 1&1 IONOS SE. All rights reserved.
6*74e237b6SSantosh Pradhan  */
7*74e237b6SSantosh Pradhan #undef TRACE_SYSTEM
8*74e237b6SSantosh Pradhan #define TRACE_SYSTEM rnbd_srv
9*74e237b6SSantosh Pradhan 
10*74e237b6SSantosh Pradhan #if !defined(_TRACE_RNBD_SRV_H) || defined(TRACE_HEADER_MULTI_READ)
11*74e237b6SSantosh Pradhan #define _TRACE_RNBD_SRV_H
12*74e237b6SSantosh Pradhan 
13*74e237b6SSantosh Pradhan #include <linux/tracepoint.h>
14*74e237b6SSantosh Pradhan 
15*74e237b6SSantosh Pradhan struct rnbd_srv_session;
16*74e237b6SSantosh Pradhan struct rtrs_srv_op;
17*74e237b6SSantosh Pradhan 
18*74e237b6SSantosh Pradhan DECLARE_EVENT_CLASS(rnbd_srv_link_class,
19*74e237b6SSantosh Pradhan 	TP_PROTO(struct rnbd_srv_session *srv),
20*74e237b6SSantosh Pradhan 
21*74e237b6SSantosh Pradhan 	TP_ARGS(srv),
22*74e237b6SSantosh Pradhan 
23*74e237b6SSantosh Pradhan 	TP_STRUCT__entry(
24*74e237b6SSantosh Pradhan 		__field(int, qdepth)
25*74e237b6SSantosh Pradhan 		__string(sessname, srv->sessname)
26*74e237b6SSantosh Pradhan 	),
27*74e237b6SSantosh Pradhan 
28*74e237b6SSantosh Pradhan 	TP_fast_assign(
29*74e237b6SSantosh Pradhan 		__entry->qdepth = srv->queue_depth;
30*74e237b6SSantosh Pradhan 		__assign_str(sessname, srv->sessname);
31*74e237b6SSantosh Pradhan 	),
32*74e237b6SSantosh Pradhan 
33*74e237b6SSantosh Pradhan 	TP_printk("sessname: %s qdepth: %d",
34*74e237b6SSantosh Pradhan 		   __get_str(sessname),
35*74e237b6SSantosh Pradhan 		   __entry->qdepth
36*74e237b6SSantosh Pradhan 	)
37*74e237b6SSantosh Pradhan );
38*74e237b6SSantosh Pradhan 
39*74e237b6SSantosh Pradhan #define DEFINE_LINK_EVENT(name) \
40*74e237b6SSantosh Pradhan DEFINE_EVENT(rnbd_srv_link_class, name, \
41*74e237b6SSantosh Pradhan 	TP_PROTO(struct rnbd_srv_session *srv), \
42*74e237b6SSantosh Pradhan 	TP_ARGS(srv))
43*74e237b6SSantosh Pradhan 
44*74e237b6SSantosh Pradhan DEFINE_LINK_EVENT(create_sess);
45*74e237b6SSantosh Pradhan DEFINE_LINK_EVENT(destroy_sess);
46*74e237b6SSantosh Pradhan 
47*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_OP_READ);
48*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_OP_WRITE);
49*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_OP_FLUSH);
50*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_OP_DISCARD);
51*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_OP_SECURE_ERASE);
52*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_F_SYNC);
53*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_F_FUA);
54*74e237b6SSantosh Pradhan 
55*74e237b6SSantosh Pradhan #define show_rnbd_rw_flags(x) \
56*74e237b6SSantosh Pradhan 	__print_flags(x, "|", \
57*74e237b6SSantosh Pradhan 		{ RNBD_OP_READ,		"READ" }, \
58*74e237b6SSantosh Pradhan 		{ RNBD_OP_WRITE,	"WRITE" }, \
59*74e237b6SSantosh Pradhan 		{ RNBD_OP_FLUSH,	"FLUSH" }, \
60*74e237b6SSantosh Pradhan 		{ RNBD_OP_DISCARD,	"DISCARD" }, \
61*74e237b6SSantosh Pradhan 		{ RNBD_OP_SECURE_ERASE,	"SECURE_ERASE" }, \
62*74e237b6SSantosh Pradhan 		{ RNBD_F_SYNC,		"SYNC" }, \
63*74e237b6SSantosh Pradhan 		{ RNBD_F_FUA,		"FUA" })
64*74e237b6SSantosh Pradhan 
65*74e237b6SSantosh Pradhan TRACE_EVENT(process_rdma,
66*74e237b6SSantosh Pradhan 	TP_PROTO(struct rnbd_srv_session *srv,
67*74e237b6SSantosh Pradhan 		 const struct rnbd_msg_io *msg,
68*74e237b6SSantosh Pradhan 		 struct rtrs_srv_op *id,
69*74e237b6SSantosh Pradhan 		 u32 datalen,
70*74e237b6SSantosh Pradhan 		 size_t usrlen),
71*74e237b6SSantosh Pradhan 
72*74e237b6SSantosh Pradhan 	TP_ARGS(srv, msg, id, datalen, usrlen),
73*74e237b6SSantosh Pradhan 
74*74e237b6SSantosh Pradhan 	TP_STRUCT__entry(
75*74e237b6SSantosh Pradhan 		__string(sessname, srv->sessname)
76*74e237b6SSantosh Pradhan 		__field(u8, dir)
77*74e237b6SSantosh Pradhan 		__field(u8, ver)
78*74e237b6SSantosh Pradhan 		__field(u32, device_id)
79*74e237b6SSantosh Pradhan 		__field(u64, sector)
80*74e237b6SSantosh Pradhan 		__field(u32, flags)
81*74e237b6SSantosh Pradhan 		__field(u32, bi_size)
82*74e237b6SSantosh Pradhan 		__field(u16, ioprio)
83*74e237b6SSantosh Pradhan 		__field(u32, datalen)
84*74e237b6SSantosh Pradhan 		__field(size_t, usrlen)
85*74e237b6SSantosh Pradhan 	),
86*74e237b6SSantosh Pradhan 
87*74e237b6SSantosh Pradhan 	TP_fast_assign(
88*74e237b6SSantosh Pradhan 		__assign_str(sessname, srv->sessname);
89*74e237b6SSantosh Pradhan 		__entry->dir = id->dir;
90*74e237b6SSantosh Pradhan 		__entry->ver = srv->ver;
91*74e237b6SSantosh Pradhan 		__entry->device_id = le32_to_cpu(msg->device_id);
92*74e237b6SSantosh Pradhan 		__entry->sector = le64_to_cpu(msg->sector);
93*74e237b6SSantosh Pradhan 		__entry->bi_size = le32_to_cpu(msg->bi_size);
94*74e237b6SSantosh Pradhan 		__entry->flags = le32_to_cpu(msg->rw);
95*74e237b6SSantosh Pradhan 		__entry->ioprio = le16_to_cpu(msg->prio);
96*74e237b6SSantosh Pradhan 		__entry->datalen = datalen;
97*74e237b6SSantosh Pradhan 		__entry->usrlen = usrlen;
98*74e237b6SSantosh Pradhan 	),
99*74e237b6SSantosh Pradhan 
100*74e237b6SSantosh Pradhan 	TP_printk("I/O req: sess: %s, type: %s, ver: %d, devid: %u, sector: %llu, bsize: %u, flags: %s, ioprio: %d, datalen: %u, usrlen: %zu",
101*74e237b6SSantosh Pradhan 		   __get_str(sessname),
102*74e237b6SSantosh Pradhan 		   __print_symbolic(__entry->dir,
103*74e237b6SSantosh Pradhan 			 { READ,  "READ" },
104*74e237b6SSantosh Pradhan 			 { WRITE, "WRITE" }),
105*74e237b6SSantosh Pradhan 		   __entry->ver,
106*74e237b6SSantosh Pradhan 		   __entry->device_id,
107*74e237b6SSantosh Pradhan 		   __entry->sector,
108*74e237b6SSantosh Pradhan 		   __entry->bi_size,
109*74e237b6SSantosh Pradhan 		   show_rnbd_rw_flags(__entry->flags),
110*74e237b6SSantosh Pradhan 		   __entry->ioprio,
111*74e237b6SSantosh Pradhan 		   __entry->datalen,
112*74e237b6SSantosh Pradhan 		   __entry->usrlen
113*74e237b6SSantosh Pradhan 	)
114*74e237b6SSantosh Pradhan );
115*74e237b6SSantosh Pradhan 
116*74e237b6SSantosh Pradhan TRACE_EVENT(process_msg_sess_info,
117*74e237b6SSantosh Pradhan 	TP_PROTO(struct rnbd_srv_session *srv,
118*74e237b6SSantosh Pradhan 		 const struct rnbd_msg_sess_info *msg),
119*74e237b6SSantosh Pradhan 
120*74e237b6SSantosh Pradhan 	TP_ARGS(srv, msg),
121*74e237b6SSantosh Pradhan 
122*74e237b6SSantosh Pradhan 	TP_STRUCT__entry(
123*74e237b6SSantosh Pradhan 		__field(u8, proto_ver)
124*74e237b6SSantosh Pradhan 		__field(u8, clt_ver)
125*74e237b6SSantosh Pradhan 		__field(u8, srv_ver)
126*74e237b6SSantosh Pradhan 		__string(sessname, srv->sessname)
127*74e237b6SSantosh Pradhan 	),
128*74e237b6SSantosh Pradhan 
129*74e237b6SSantosh Pradhan 	TP_fast_assign(
130*74e237b6SSantosh Pradhan 		__entry->proto_ver = srv->ver;
131*74e237b6SSantosh Pradhan 		__entry->clt_ver = msg->ver;
132*74e237b6SSantosh Pradhan 		__entry->srv_ver = RNBD_PROTO_VER_MAJOR;
133*74e237b6SSantosh Pradhan 		__assign_str(sessname, srv->sessname);
134*74e237b6SSantosh Pradhan 	),
135*74e237b6SSantosh Pradhan 
136*74e237b6SSantosh Pradhan 	TP_printk("Session %s using proto-ver %d (clt-ver: %d, srv-ver: %d)",
137*74e237b6SSantosh Pradhan 		   __get_str(sessname),
138*74e237b6SSantosh Pradhan 		   __entry->proto_ver,
139*74e237b6SSantosh Pradhan 		   __entry->clt_ver,
140*74e237b6SSantosh Pradhan 		   __entry->srv_ver
141*74e237b6SSantosh Pradhan 	)
142*74e237b6SSantosh Pradhan );
143*74e237b6SSantosh Pradhan 
144*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_ACCESS_RO);
145*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_ACCESS_RW);
146*74e237b6SSantosh Pradhan TRACE_DEFINE_ENUM(RNBD_ACCESS_MIGRATION);
147*74e237b6SSantosh Pradhan 
148*74e237b6SSantosh Pradhan #define show_rnbd_access_mode(x) \
149*74e237b6SSantosh Pradhan 	__print_symbolic(x, \
150*74e237b6SSantosh Pradhan 		{ RNBD_ACCESS_RO,		"RO" }, \
151*74e237b6SSantosh Pradhan 		{ RNBD_ACCESS_RW,		"RW" }, \
152*74e237b6SSantosh Pradhan 		{ RNBD_ACCESS_MIGRATION,	"MIGRATION" })
153*74e237b6SSantosh Pradhan 
154*74e237b6SSantosh Pradhan TRACE_EVENT(process_msg_open,
155*74e237b6SSantosh Pradhan 	TP_PROTO(struct rnbd_srv_session *srv,
156*74e237b6SSantosh Pradhan 		 const struct rnbd_msg_open *msg),
157*74e237b6SSantosh Pradhan 
158*74e237b6SSantosh Pradhan 	TP_ARGS(srv, msg),
159*74e237b6SSantosh Pradhan 
160*74e237b6SSantosh Pradhan 	TP_STRUCT__entry(
161*74e237b6SSantosh Pradhan 		__field(u8, access_mode)
162*74e237b6SSantosh Pradhan 		__string(sessname, srv->sessname)
163*74e237b6SSantosh Pradhan 		__string(dev_name, msg->dev_name)
164*74e237b6SSantosh Pradhan 	),
165*74e237b6SSantosh Pradhan 
166*74e237b6SSantosh Pradhan 	TP_fast_assign(
167*74e237b6SSantosh Pradhan 		__entry->access_mode = msg->access_mode;
168*74e237b6SSantosh Pradhan 		__assign_str(sessname, srv->sessname);
169*74e237b6SSantosh Pradhan 		__assign_str(dev_name, msg->dev_name);
170*74e237b6SSantosh Pradhan 	),
171*74e237b6SSantosh Pradhan 
172*74e237b6SSantosh Pradhan 	TP_printk("Open message received: session='%s' path='%s' access_mode=%s",
173*74e237b6SSantosh Pradhan 		   __get_str(sessname),
174*74e237b6SSantosh Pradhan 		   __get_str(dev_name),
175*74e237b6SSantosh Pradhan 		   show_rnbd_access_mode(__entry->access_mode)
176*74e237b6SSantosh Pradhan 	)
177*74e237b6SSantosh Pradhan );
178*74e237b6SSantosh Pradhan 
179*74e237b6SSantosh Pradhan TRACE_EVENT(process_msg_close,
180*74e237b6SSantosh Pradhan 	TP_PROTO(struct rnbd_srv_session *srv,
181*74e237b6SSantosh Pradhan 		 const struct rnbd_msg_close *msg),
182*74e237b6SSantosh Pradhan 
183*74e237b6SSantosh Pradhan 	TP_ARGS(srv, msg),
184*74e237b6SSantosh Pradhan 
185*74e237b6SSantosh Pradhan 	TP_STRUCT__entry(
186*74e237b6SSantosh Pradhan 		__field(u32, device_id)
187*74e237b6SSantosh Pradhan 		__string(sessname, srv->sessname)
188*74e237b6SSantosh Pradhan 	),
189*74e237b6SSantosh Pradhan 
190*74e237b6SSantosh Pradhan 	TP_fast_assign(
191*74e237b6SSantosh Pradhan 		__entry->device_id = le32_to_cpu(msg->device_id);
192*74e237b6SSantosh Pradhan 		__assign_str(sessname, srv->sessname);
193*74e237b6SSantosh Pradhan 	),
194*74e237b6SSantosh Pradhan 
195*74e237b6SSantosh Pradhan 	TP_printk("Close message received: session='%s' device id='%d'",
196*74e237b6SSantosh Pradhan 		   __get_str(sessname),
197*74e237b6SSantosh Pradhan 		   __entry->device_id
198*74e237b6SSantosh Pradhan 	)
199*74e237b6SSantosh Pradhan );
200*74e237b6SSantosh Pradhan 
201*74e237b6SSantosh Pradhan #endif /* _TRACE_RNBD_SRV_H */
202*74e237b6SSantosh Pradhan 
203*74e237b6SSantosh Pradhan #undef TRACE_INCLUDE_PATH
204*74e237b6SSantosh Pradhan #define TRACE_INCLUDE_PATH .
205*74e237b6SSantosh Pradhan #define TRACE_INCLUDE_FILE rnbd-srv-trace
206*74e237b6SSantosh Pradhan #include <trace/define_trace.h>
207*74e237b6SSantosh Pradhan 
208