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(debit_entropy,
89 	TP_PROTO(const char *pool_name, int debit_bits),
90 
91 	TP_ARGS(pool_name, debit_bits),
92 
93 	TP_STRUCT__entry(
94 		__field( const char *,	pool_name		)
95 		__field(	  int,	debit_bits		)
96 	),
97 
98 	TP_fast_assign(
99 		__entry->pool_name	= pool_name;
100 		__entry->debit_bits	= debit_bits;
101 	),
102 
103 	TP_printk("%s: debit_bits %d", __entry->pool_name,
104 		  __entry->debit_bits)
105 );
106 
107 TRACE_EVENT(add_input_randomness,
108 	TP_PROTO(int input_bits),
109 
110 	TP_ARGS(input_bits),
111 
112 	TP_STRUCT__entry(
113 		__field(	  int,	input_bits		)
114 	),
115 
116 	TP_fast_assign(
117 		__entry->input_bits	= input_bits;
118 	),
119 
120 	TP_printk("input_pool_bits %d", __entry->input_bits)
121 );
122 
123 TRACE_EVENT(add_disk_randomness,
124 	TP_PROTO(dev_t dev, int input_bits),
125 
126 	TP_ARGS(dev, input_bits),
127 
128 	TP_STRUCT__entry(
129 		__field(	dev_t,	dev			)
130 		__field(	  int,	input_bits		)
131 	),
132 
133 	TP_fast_assign(
134 		__entry->dev		= dev;
135 		__entry->input_bits	= input_bits;
136 	),
137 
138 	TP_printk("dev %d,%d input_pool_bits %d", MAJOR(__entry->dev),
139 		  MINOR(__entry->dev), __entry->input_bits)
140 );
141 
142 DECLARE_EVENT_CLASS(random__get_random_bytes,
143 	TP_PROTO(int nbytes, unsigned long IP),
144 
145 	TP_ARGS(nbytes, IP),
146 
147 	TP_STRUCT__entry(
148 		__field(	  int,	nbytes			)
149 		__field(unsigned long,	IP			)
150 	),
151 
152 	TP_fast_assign(
153 		__entry->nbytes		= nbytes;
154 		__entry->IP		= IP;
155 	),
156 
157 	TP_printk("nbytes %d caller %pS", __entry->nbytes, (void *)__entry->IP)
158 );
159 
160 DEFINE_EVENT(random__get_random_bytes, get_random_bytes,
161 	TP_PROTO(int nbytes, unsigned long IP),
162 
163 	TP_ARGS(nbytes, IP)
164 );
165 
166 DEFINE_EVENT(random__get_random_bytes, get_random_bytes_arch,
167 	TP_PROTO(int nbytes, unsigned long IP),
168 
169 	TP_ARGS(nbytes, IP)
170 );
171 
172 DECLARE_EVENT_CLASS(random__extract_entropy,
173 	TP_PROTO(const char *pool_name, int nbytes, int entropy_count,
174 		 unsigned long IP),
175 
176 	TP_ARGS(pool_name, nbytes, entropy_count, IP),
177 
178 	TP_STRUCT__entry(
179 		__field( const char *,	pool_name		)
180 		__field(	  int,	nbytes			)
181 		__field(	  int,	entropy_count		)
182 		__field(unsigned long,	IP			)
183 	),
184 
185 	TP_fast_assign(
186 		__entry->pool_name	= pool_name;
187 		__entry->nbytes		= nbytes;
188 		__entry->entropy_count	= entropy_count;
189 		__entry->IP		= IP;
190 	),
191 
192 	TP_printk("%s pool: nbytes %d entropy_count %d caller %pS",
193 		  __entry->pool_name, __entry->nbytes, __entry->entropy_count,
194 		  (void *)__entry->IP)
195 );
196 
197 
198 DEFINE_EVENT(random__extract_entropy, extract_entropy,
199 	TP_PROTO(const char *pool_name, int nbytes, int entropy_count,
200 		 unsigned long IP),
201 
202 	TP_ARGS(pool_name, nbytes, entropy_count, IP)
203 );
204 
205 TRACE_EVENT(urandom_read,
206 	TP_PROTO(int got_bits, int pool_left, int input_left),
207 
208 	TP_ARGS(got_bits, pool_left, input_left),
209 
210 	TP_STRUCT__entry(
211 		__field(	  int,	got_bits		)
212 		__field(	  int,	pool_left		)
213 		__field(	  int,	input_left		)
214 	),
215 
216 	TP_fast_assign(
217 		__entry->got_bits	= got_bits;
218 		__entry->pool_left	= pool_left;
219 		__entry->input_left	= input_left;
220 	),
221 
222 	TP_printk("got_bits %d nonblocking_pool_entropy_left %d "
223 		  "input_entropy_left %d", __entry->got_bits,
224 		  __entry->pool_left, __entry->input_left)
225 );
226 
227 TRACE_EVENT(prandom_u32,
228 
229 	TP_PROTO(unsigned int ret),
230 
231 	TP_ARGS(ret),
232 
233 	TP_STRUCT__entry(
234 		__field(   unsigned int, ret)
235 	),
236 
237 	TP_fast_assign(
238 		__entry->ret = ret;
239 	),
240 
241 	TP_printk("ret=%u" , __entry->ret)
242 );
243 
244 #endif /* _TRACE_RANDOM_H */
245 
246 /* This part must be outside protection */
247 #include <trace/define_trace.h>
248