mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-21 23:36:57 +07:00
6265e169cd
As the input pool gets filled, start transfering entropy to the output pools until they get filled. This allows us to use the output pools to store more system entropy. Waste not, want not.... Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
188 lines
4.2 KiB
C
188 lines
4.2 KiB
C
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM random
|
|
|
|
#if !defined(_TRACE_RANDOM_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _TRACE_RANDOM_H
|
|
|
|
#include <linux/writeback.h>
|
|
#include <linux/tracepoint.h>
|
|
|
|
TRACE_EVENT(add_device_randomness,
|
|
TP_PROTO(int bytes, unsigned long IP),
|
|
|
|
TP_ARGS(bytes, IP),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( int, bytes )
|
|
__field(unsigned long, IP )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->bytes = bytes;
|
|
__entry->IP = IP;
|
|
),
|
|
|
|
TP_printk("bytes %d caller %pF",
|
|
__entry->bytes, (void *)__entry->IP)
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(random__mix_pool_bytes,
|
|
TP_PROTO(const char *pool_name, int bytes, unsigned long IP),
|
|
|
|
TP_ARGS(pool_name, bytes, IP),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( const char *, pool_name )
|
|
__field( int, bytes )
|
|
__field(unsigned long, IP )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->pool_name = pool_name;
|
|
__entry->bytes = bytes;
|
|
__entry->IP = IP;
|
|
),
|
|
|
|
TP_printk("%s pool: bytes %d caller %pF",
|
|
__entry->pool_name, __entry->bytes, (void *)__entry->IP)
|
|
);
|
|
|
|
DEFINE_EVENT(random__mix_pool_bytes, mix_pool_bytes,
|
|
TP_PROTO(const char *pool_name, int bytes, unsigned long IP),
|
|
|
|
TP_ARGS(pool_name, bytes, IP)
|
|
);
|
|
|
|
DEFINE_EVENT(random__mix_pool_bytes, mix_pool_bytes_nolock,
|
|
TP_PROTO(const char *pool_name, int bytes, unsigned long IP),
|
|
|
|
TP_ARGS(pool_name, bytes, IP)
|
|
);
|
|
|
|
TRACE_EVENT(credit_entropy_bits,
|
|
TP_PROTO(const char *pool_name, int bits, int entropy_count,
|
|
int entropy_total, unsigned long IP),
|
|
|
|
TP_ARGS(pool_name, bits, entropy_count, entropy_total, IP),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( const char *, pool_name )
|
|
__field( int, bits )
|
|
__field( int, entropy_count )
|
|
__field( int, entropy_total )
|
|
__field(unsigned long, IP )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->pool_name = pool_name;
|
|
__entry->bits = bits;
|
|
__entry->entropy_count = entropy_count;
|
|
__entry->entropy_total = entropy_total;
|
|
__entry->IP = IP;
|
|
),
|
|
|
|
TP_printk("%s pool: bits %d entropy_count %d entropy_total %d "
|
|
"caller %pF", __entry->pool_name, __entry->bits,
|
|
__entry->entropy_count, __entry->entropy_total,
|
|
(void *)__entry->IP)
|
|
);
|
|
|
|
TRACE_EVENT(push_to_pool,
|
|
TP_PROTO(const char *pool_name, int pool_bits, int input_bits),
|
|
|
|
TP_ARGS(pool_name, pool_bits, input_bits),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( const char *, pool_name )
|
|
__field( int, pool_bits )
|
|
__field( int, input_bits )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->pool_name = pool_name;
|
|
__entry->pool_bits = pool_bits;
|
|
__entry->input_bits = input_bits;
|
|
),
|
|
|
|
TP_printk("%s: pool_bits %d input_pool_bits %d",
|
|
__entry->pool_name, __entry->pool_bits,
|
|
__entry->input_bits)
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(random__get_random_bytes,
|
|
TP_PROTO(int nbytes, unsigned long IP),
|
|
|
|
TP_ARGS(nbytes, IP),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( int, nbytes )
|
|
__field(unsigned long, IP )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->nbytes = nbytes;
|
|
__entry->IP = IP;
|
|
),
|
|
|
|
TP_printk("nbytes %d caller %pF", __entry->nbytes, (void *)__entry->IP)
|
|
);
|
|
|
|
DEFINE_EVENT(random__get_random_bytes, get_random_bytes,
|
|
TP_PROTO(int nbytes, unsigned long IP),
|
|
|
|
TP_ARGS(nbytes, IP)
|
|
);
|
|
|
|
DEFINE_EVENT(random__get_random_bytes, get_random_bytes_arch,
|
|
TP_PROTO(int nbytes, unsigned long IP),
|
|
|
|
TP_ARGS(nbytes, IP)
|
|
);
|
|
|
|
DECLARE_EVENT_CLASS(random__extract_entropy,
|
|
TP_PROTO(const char *pool_name, int nbytes, int entropy_count,
|
|
unsigned long IP),
|
|
|
|
TP_ARGS(pool_name, nbytes, entropy_count, IP),
|
|
|
|
TP_STRUCT__entry(
|
|
__field( const char *, pool_name )
|
|
__field( int, nbytes )
|
|
__field( int, entropy_count )
|
|
__field(unsigned long, IP )
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->pool_name = pool_name;
|
|
__entry->nbytes = nbytes;
|
|
__entry->entropy_count = entropy_count;
|
|
__entry->IP = IP;
|
|
),
|
|
|
|
TP_printk("%s pool: nbytes %d entropy_count %d caller %pF",
|
|
__entry->pool_name, __entry->nbytes, __entry->entropy_count,
|
|
(void *)__entry->IP)
|
|
);
|
|
|
|
|
|
DEFINE_EVENT(random__extract_entropy, extract_entropy,
|
|
TP_PROTO(const char *pool_name, int nbytes, int entropy_count,
|
|
unsigned long IP),
|
|
|
|
TP_ARGS(pool_name, nbytes, entropy_count, IP)
|
|
);
|
|
|
|
DEFINE_EVENT(random__extract_entropy, extract_entropy_user,
|
|
TP_PROTO(const char *pool_name, int nbytes, int entropy_count,
|
|
unsigned long IP),
|
|
|
|
TP_ARGS(pool_name, nbytes, entropy_count, IP)
|
|
);
|
|
|
|
|
|
|
|
#endif /* _TRACE_RANDOM_H */
|
|
|
|
/* This part must be outside protection */
|
|
#include <trace/define_trace.h>
|