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