1 /* SPDX-License-Identifier: GPL-2.0 */
2 #undef TRACE_SYSTEM
3 #define TRACE_SYSTEM random
4 
5 #if !defined(_TRACE_RANDOM_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_RANDOM_H
7 
8 #include <linux/writeback.h>
9 #include <linux/tracepoint.h>
10 
11 TRACE_EVENT(add_device_randomness,
12 	TP_PROTO(int bytes, unsigned long IP),
13 
14 	TP_ARGS(bytes, IP),
15 
16 	TP_STRUCT__entry(
17 		__field(	  int,	bytes			)
18 		__field(unsigned long,	IP			)
19 	),
20 
21 	TP_fast_assign(
22 		__entry->bytes		= bytes;
23 		__entry->IP		= IP;
24 	),
25 
26 	TP_printk("bytes %d caller %pS",
27 		__entry->bytes, (void *)__entry->IP)
28 );
29 
30 DECLARE_EVENT_CLASS(random__mix_pool_bytes,
31 	TP_PROTO(const char *pool_name, int bytes, unsigned long IP),
32 
33 	TP_ARGS(pool_name, bytes, IP),
34 
35 	TP_STRUCT__entry(
36 		__field( const char *,	pool_name		)
37 		__field(	  int,	bytes			)
38 		__field(unsigned long,	IP			)
39 	),
40 
41 	TP_fast_assign(
42 		__entry->pool_name	= pool_name;
43 		__entry->bytes		= bytes;
44 		__entry->IP		= IP;
45 	),
46 
47 	TP_printk("%s pool: bytes %d caller %pS",
48 		  __entry->pool_name, __entry->bytes, (void *)__entry->IP)
49 );
50 
51 DEFINE_EVENT(random__mix_pool_bytes, mix_pool_bytes,
52 	TP_PROTO(const char *pool_name, int bytes, unsigned long IP),
53 
54 	TP_ARGS(pool_name, bytes, IP)
55 );
56 
57 DEFINE_EVENT(random__mix_pool_bytes, mix_pool_bytes_nolock,
58 	TP_PROTO(const char *pool_name, int bytes, unsigned long IP),
59 
60 	TP_ARGS(pool_name, bytes, IP)
61 );
62 
63 TRACE_EVENT(credit_entropy_bits,
64 	TP_PROTO(const char *pool_name, int bits, int entropy_count,
65 		 unsigned long IP),
66 
67 	TP_ARGS(pool_name, bits, entropy_count, IP),
68 
69 	TP_STRUCT__entry(
70 		__field( const char *,	pool_name		)
71 		__field(	  int,	bits			)
72 		__field(	  int,	entropy_count		)
73 		__field(unsigned long,	IP			)
74 	),
75 
76 	TP_fast_assign(
77 		__entry->pool_name	= pool_name;
78 		__entry->bits		= bits;
79 		__entry->entropy_count	= entropy_count;
80 		__entry->IP		= IP;
81 	),
82 
83 	TP_printk("%s pool: bits %d entropy_count %d caller %pS",
84 		  __entry->pool_name, __entry->bits,
85 		  __entry->entropy_count, (void *)__entry->IP)
86 );
87 
88 TRACE_EVENT(push_to_pool,
89 	TP_PROTO(const char *pool_name, int pool_bits, int input_bits),
90 
91 	TP_ARGS(pool_name, pool_bits, input_bits),
92 
93 	TP_STRUCT__entry(
94 		__field( const char *,	pool_name		)
95 		__field(	  int,	pool_bits		)
96 		__field(	  int,	input_bits		)
97 	),
98 
99 	TP_fast_assign(
100 		__entry->pool_name	= pool_name;
101 		__entry->pool_bits	= pool_bits;
102 		__entry->input_bits	= input_bits;
103 	),
104 
105 	TP_printk("%s: pool_bits %d input_pool_bits %d",
106 		  __entry->pool_name, __entry->pool_bits,
107 		  __entry->input_bits)
108 );
109 
110 TRACE_EVENT(debit_entropy,
111 	TP_PROTO(const char *pool_name, int debit_bits),
112 
113 	TP_ARGS(pool_name, debit_bits),
114 
115 	TP_STRUCT__entry(
116 		__field( const char *,	pool_name		)
117 		__field(	  int,	debit_bits		)
118 	),
119 
120 	TP_fast_assign(
121 		__entry->pool_name	= pool_name;
122 		__entry->debit_bits	= debit_bits;
123 	),
124 
125 	TP_printk("%s: debit_bits %d", __entry->pool_name,
126 		  __entry->debit_bits)
127 );
128 
129 TRACE_EVENT(add_input_randomness,
130 	TP_PROTO(int input_bits),
131 
132 	TP_ARGS(input_bits),
133 
134 	TP_STRUCT__entry(
135 		__field(	  int,	input_bits		)
136 	),
137 
138 	TP_fast_assign(
139 		__entry->input_bits	= input_bits;
140 	),
141 
142 	TP_printk("input_pool_bits %d", __entry->input_bits)
143 );
144 
145 TRACE_EVENT(add_disk_randomness,
146 	TP_PROTO(dev_t dev, int input_bits),
147 
148 	TP_ARGS(dev, input_bits),
149 
150 	TP_STRUCT__entry(
151 		__field(	dev_t,	dev			)
152 		__field(	  int,	input_bits		)
153 	),
154 
155 	TP_fast_assign(
156 		__entry->dev		= dev;
157 		__entry->input_bits	= input_bits;
158 	),
159 
160 	TP_printk("dev %d,%d input_pool_bits %d", MAJOR(__entry->dev),
161 		  MINOR(__entry->dev), __entry->input_bits)
162 );
163 
164 TRACE_EVENT(xfer_secondary_pool,
165 	TP_PROTO(const char *pool_name, int xfer_bits, int request_bits,
166 		 int pool_entropy, int input_entropy),
167 
168 	TP_ARGS(pool_name, xfer_bits, request_bits, pool_entropy,
169 		input_entropy),
170 
171 	TP_STRUCT__entry(
172 		__field( const char *,	pool_name		)
173 		__field(	  int,	xfer_bits		)
174 		__field(	  int,	request_bits		)
175 		__field(	  int,	pool_entropy		)
176 		__field(	  int,	input_entropy		)
177 	),
178 
179 	TP_fast_assign(
180 		__entry->pool_name	= pool_name;
181 		__entry->xfer_bits	= xfer_bits;
182 		__entry->request_bits	= request_bits;
183 		__entry->pool_entropy	= pool_entropy;
184 		__entry->input_entropy	= input_entropy;
185 	),
186 
187 	TP_printk("pool %s xfer_bits %d request_bits %d pool_entropy %d "
188 		  "input_entropy %d", __entry->pool_name, __entry->xfer_bits,
189 		  __entry->request_bits, __entry->pool_entropy,
190 		  __entry->input_entropy)
191 );
192 
193 DECLARE_EVENT_CLASS(random__get_random_bytes,
194 	TP_PROTO(int nbytes, unsigned long IP),
195 
196 	TP_ARGS(nbytes, IP),
197 
198 	TP_STRUCT__entry(
199 		__field(	  int,	nbytes			)
200 		__field(unsigned long,	IP			)
201 	),
202 
203 	TP_fast_assign(
204 		__entry->nbytes		= nbytes;
205 		__entry->IP		= IP;
206 	),
207 
208 	TP_printk("nbytes %d caller %pS", __entry->nbytes, (void *)__entry->IP)
209 );
210 
211 DEFINE_EVENT(random__get_random_bytes, get_random_bytes,
212 	TP_PROTO(int nbytes, unsigned long IP),
213 
214 	TP_ARGS(nbytes, IP)
215 );
216 
217 DEFINE_EVENT(random__get_random_bytes, get_random_bytes_arch,
218 	TP_PROTO(int nbytes, unsigned long IP),
219 
220 	TP_ARGS(nbytes, IP)
221 );
222 
223 DECLARE_EVENT_CLASS(random__extract_entropy,
224 	TP_PROTO(const char *pool_name, int nbytes, int entropy_count,
225 		 unsigned long IP),
226 
227 	TP_ARGS(pool_name, nbytes, entropy_count, IP),
228 
229 	TP_STRUCT__entry(
230 		__field( const char *,	pool_name		)
231 		__field(	  int,	nbytes			)
232 		__field(	  int,	entropy_count		)
233 		__field(unsigned long,	IP			)
234 	),
235 
236 	TP_fast_assign(
237 		__entry->pool_name	= pool_name;
238 		__entry->nbytes		= nbytes;
239 		__entry->entropy_count	= entropy_count;
240 		__entry->IP		= IP;
241 	),
242 
243 	TP_printk("%s pool: nbytes %d entropy_count %d caller %pS",
244 		  __entry->pool_name, __entry->nbytes, __entry->entropy_count,
245 		  (void *)__entry->IP)
246 );
247 
248 
249 DEFINE_EVENT(random__extract_entropy, extract_entropy,
250 	TP_PROTO(const char *pool_name, int nbytes, int entropy_count,
251 		 unsigned long IP),
252 
253 	TP_ARGS(pool_name, nbytes, entropy_count, IP)
254 );
255 
256 DEFINE_EVENT(random__extract_entropy, extract_entropy_user,
257 	TP_PROTO(const char *pool_name, int nbytes, int entropy_count,
258 		 unsigned long IP),
259 
260 	TP_ARGS(pool_name, nbytes, entropy_count, IP)
261 );
262 
263 TRACE_EVENT(random_read,
264 	TP_PROTO(int got_bits, int need_bits, int pool_left, int input_left),
265 
266 	TP_ARGS(got_bits, need_bits, pool_left, input_left),
267 
268 	TP_STRUCT__entry(
269 		__field(	  int,	got_bits		)
270 		__field(	  int,	need_bits		)
271 		__field(	  int,	pool_left		)
272 		__field(	  int,	input_left		)
273 	),
274 
275 	TP_fast_assign(
276 		__entry->got_bits	= got_bits;
277 		__entry->need_bits	= need_bits;
278 		__entry->pool_left	= pool_left;
279 		__entry->input_left	= input_left;
280 	),
281 
282 	TP_printk("got_bits %d still_needed_bits %d "
283 		  "blocking_pool_entropy_left %d input_entropy_left %d",
284 		  __entry->got_bits, __entry->got_bits, __entry->pool_left,
285 		  __entry->input_left)
286 );
287 
288 TRACE_EVENT(urandom_read,
289 	TP_PROTO(int got_bits, int pool_left, int input_left),
290 
291 	TP_ARGS(got_bits, pool_left, input_left),
292 
293 	TP_STRUCT__entry(
294 		__field(	  int,	got_bits		)
295 		__field(	  int,	pool_left		)
296 		__field(	  int,	input_left		)
297 	),
298 
299 	TP_fast_assign(
300 		__entry->got_bits	= got_bits;
301 		__entry->pool_left	= pool_left;
302 		__entry->input_left	= input_left;
303 	),
304 
305 	TP_printk("got_bits %d nonblocking_pool_entropy_left %d "
306 		  "input_entropy_left %d", __entry->got_bits,
307 		  __entry->pool_left, __entry->input_left)
308 );
309 
310 TRACE_EVENT(prandom_u32,
311 
312 	TP_PROTO(unsigned int ret),
313 
314 	TP_ARGS(ret),
315 
316 	TP_STRUCT__entry(
317 		__field(   unsigned int, ret)
318 	),
319 
320 	TP_fast_assign(
321 		__entry->ret = ret;
322 	),
323 
324 	TP_printk("ret=%u" , __entry->ret)
325 );
326 
327 #endif /* _TRACE_RANDOM_H */
328 
329 /* This part must be outside protection */
330 #include <trace/define_trace.h>
331