1 /* SPDX-License-Identifier: GPL-2.0 */
3 #define TRACE_SYSTEM random
5 #if !defined(_TRACE_RANDOM_H) || defined(TRACE_HEADER_MULTI_READ)
6 #define _TRACE_RANDOM_H
8 #include <linux/writeback.h>
9 #include <linux/tracepoint.h>
11 TRACE_EVENT(add_device_randomness
,
12 TP_PROTO(int bytes
, unsigned long IP
),
18 __field(unsigned long, IP
)
22 __entry
->bytes
= bytes
;
26 TP_printk("bytes %d caller %pS",
27 __entry
->bytes
, (void *)__entry
->IP
)
30 DECLARE_EVENT_CLASS(random__mix_pool_bytes
,
31 TP_PROTO(const char *pool_name
, int bytes
, unsigned long IP
),
33 TP_ARGS(pool_name
, bytes
, IP
),
36 __field( const char *, pool_name
)
38 __field(unsigned long, IP
)
42 __entry
->pool_name
= pool_name
;
43 __entry
->bytes
= bytes
;
47 TP_printk("%s pool: bytes %d caller %pS",
48 __entry
->pool_name
, __entry
->bytes
, (void *)__entry
->IP
)
51 DEFINE_EVENT(random__mix_pool_bytes
, mix_pool_bytes
,
52 TP_PROTO(const char *pool_name
, int bytes
, unsigned long IP
),
54 TP_ARGS(pool_name
, bytes
, IP
)
57 DEFINE_EVENT(random__mix_pool_bytes
, mix_pool_bytes_nolock
,
58 TP_PROTO(const char *pool_name
, int bytes
, unsigned long IP
),
60 TP_ARGS(pool_name
, bytes
, IP
)
63 TRACE_EVENT(credit_entropy_bits
,
64 TP_PROTO(const char *pool_name
, int bits
, int entropy_count
,
65 int entropy_total
, unsigned long IP
),
67 TP_ARGS(pool_name
, bits
, entropy_count
, entropy_total
, IP
),
70 __field( const char *, pool_name
)
72 __field( int, entropy_count
)
73 __field( int, entropy_total
)
74 __field(unsigned long, IP
)
78 __entry
->pool_name
= pool_name
;
80 __entry
->entropy_count
= entropy_count
;
81 __entry
->entropy_total
= entropy_total
;
85 TP_printk("%s pool: bits %d entropy_count %d entropy_total %d "
86 "caller %pS", __entry
->pool_name
, __entry
->bits
,
87 __entry
->entropy_count
, __entry
->entropy_total
,
91 TRACE_EVENT(push_to_pool
,
92 TP_PROTO(const char *pool_name
, int pool_bits
, int input_bits
),
94 TP_ARGS(pool_name
, pool_bits
, input_bits
),
97 __field( const char *, pool_name
)
98 __field( int, pool_bits
)
99 __field( int, input_bits
)
103 __entry
->pool_name
= pool_name
;
104 __entry
->pool_bits
= pool_bits
;
105 __entry
->input_bits
= input_bits
;
108 TP_printk("%s: pool_bits %d input_pool_bits %d",
109 __entry
->pool_name
, __entry
->pool_bits
,
113 TRACE_EVENT(debit_entropy
,
114 TP_PROTO(const char *pool_name
, int debit_bits
),
116 TP_ARGS(pool_name
, debit_bits
),
119 __field( const char *, pool_name
)
120 __field( int, debit_bits
)
124 __entry
->pool_name
= pool_name
;
125 __entry
->debit_bits
= debit_bits
;
128 TP_printk("%s: debit_bits %d", __entry
->pool_name
,
132 TRACE_EVENT(add_input_randomness
,
133 TP_PROTO(int input_bits
),
138 __field( int, input_bits
)
142 __entry
->input_bits
= input_bits
;
145 TP_printk("input_pool_bits %d", __entry
->input_bits
)
148 TRACE_EVENT(add_disk_randomness
,
149 TP_PROTO(dev_t dev
, int input_bits
),
151 TP_ARGS(dev
, input_bits
),
154 __field( dev_t
, dev
)
155 __field( int, input_bits
)
160 __entry
->input_bits
= input_bits
;
163 TP_printk("dev %d,%d input_pool_bits %d", MAJOR(__entry
->dev
),
164 MINOR(__entry
->dev
), __entry
->input_bits
)
167 TRACE_EVENT(xfer_secondary_pool
,
168 TP_PROTO(const char *pool_name
, int xfer_bits
, int request_bits
,
169 int pool_entropy
, int input_entropy
),
171 TP_ARGS(pool_name
, xfer_bits
, request_bits
, pool_entropy
,
175 __field( const char *, pool_name
)
176 __field( int, xfer_bits
)
177 __field( int, request_bits
)
178 __field( int, pool_entropy
)
179 __field( int, input_entropy
)
183 __entry
->pool_name
= pool_name
;
184 __entry
->xfer_bits
= xfer_bits
;
185 __entry
->request_bits
= request_bits
;
186 __entry
->pool_entropy
= pool_entropy
;
187 __entry
->input_entropy
= input_entropy
;
190 TP_printk("pool %s xfer_bits %d request_bits %d pool_entropy %d "
191 "input_entropy %d", __entry
->pool_name
, __entry
->xfer_bits
,
192 __entry
->request_bits
, __entry
->pool_entropy
,
193 __entry
->input_entropy
)
196 DECLARE_EVENT_CLASS(random__get_random_bytes
,
197 TP_PROTO(int nbytes
, unsigned long IP
),
202 __field( int, nbytes
)
203 __field(unsigned long, IP
)
207 __entry
->nbytes
= nbytes
;
211 TP_printk("nbytes %d caller %pS", __entry
->nbytes
, (void *)__entry
->IP
)
214 DEFINE_EVENT(random__get_random_bytes
, get_random_bytes
,
215 TP_PROTO(int nbytes
, unsigned long IP
),
220 DEFINE_EVENT(random__get_random_bytes
, get_random_bytes_arch
,
221 TP_PROTO(int nbytes
, unsigned long IP
),
226 DECLARE_EVENT_CLASS(random__extract_entropy
,
227 TP_PROTO(const char *pool_name
, int nbytes
, int entropy_count
,
230 TP_ARGS(pool_name
, nbytes
, entropy_count
, IP
),
233 __field( const char *, pool_name
)
234 __field( int, nbytes
)
235 __field( int, entropy_count
)
236 __field(unsigned long, IP
)
240 __entry
->pool_name
= pool_name
;
241 __entry
->nbytes
= nbytes
;
242 __entry
->entropy_count
= entropy_count
;
246 TP_printk("%s pool: nbytes %d entropy_count %d caller %pS",
247 __entry
->pool_name
, __entry
->nbytes
, __entry
->entropy_count
,
252 DEFINE_EVENT(random__extract_entropy
, extract_entropy
,
253 TP_PROTO(const char *pool_name
, int nbytes
, int entropy_count
,
256 TP_ARGS(pool_name
, nbytes
, entropy_count
, IP
)
259 DEFINE_EVENT(random__extract_entropy
, extract_entropy_user
,
260 TP_PROTO(const char *pool_name
, int nbytes
, int entropy_count
,
263 TP_ARGS(pool_name
, nbytes
, entropy_count
, IP
)
266 TRACE_EVENT(random_read
,
267 TP_PROTO(int got_bits
, int need_bits
, int pool_left
, int input_left
),
269 TP_ARGS(got_bits
, need_bits
, pool_left
, input_left
),
272 __field( int, got_bits
)
273 __field( int, need_bits
)
274 __field( int, pool_left
)
275 __field( int, input_left
)
279 __entry
->got_bits
= got_bits
;
280 __entry
->need_bits
= need_bits
;
281 __entry
->pool_left
= pool_left
;
282 __entry
->input_left
= input_left
;
285 TP_printk("got_bits %d still_needed_bits %d "
286 "blocking_pool_entropy_left %d input_entropy_left %d",
287 __entry
->got_bits
, __entry
->got_bits
, __entry
->pool_left
,
291 TRACE_EVENT(urandom_read
,
292 TP_PROTO(int got_bits
, int pool_left
, int input_left
),
294 TP_ARGS(got_bits
, pool_left
, input_left
),
297 __field( int, got_bits
)
298 __field( int, pool_left
)
299 __field( int, input_left
)
303 __entry
->got_bits
= got_bits
;
304 __entry
->pool_left
= pool_left
;
305 __entry
->input_left
= input_left
;
308 TP_printk("got_bits %d nonblocking_pool_entropy_left %d "
309 "input_entropy_left %d", __entry
->got_bits
,
310 __entry
->pool_left
, __entry
->input_left
)
313 #endif /* _TRACE_RANDOM_H */
315 /* This part must be outside protection */
316 #include <trace/define_trace.h>