lkml.org 
[lkml]   [2013]   [Dec]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH 11/14] random: separate entropy since auto-push from entropy_total
We're using and updating the entropy_total field for different
purposes on input_pool and nonblocking_pool, only one of which
matches the name. This makes it hard to understand what the field
means.

Separate the computation on input_pool, which is of entropy since
the last auto-push, from the computation on nonblocking_pool.
Also compute 'initialized' only for nonblocking_pool, which is the
only place where the concept really makes sense.

Signed-off-by: Greg Price <price@mit.edu>
---
drivers/char/random.c | 17 +++++++++--------
include/trace/events/random.h | 24 ++++++++++++++----------
2 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/drivers/char/random.c b/drivers/char/random.c
index ea389723f..1f9c69662 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -425,6 +425,7 @@ struct entropy_store {
unsigned short add_ptr;
unsigned short input_rotate;
int entropy_count;
+ int entropy_since_push;
int entropy_total;
unsigned int initialized:1;
unsigned int limit:1;
@@ -662,11 +663,10 @@ retry:
if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig)
goto retry;

- r->entropy_total += nbits;
- if (!r->initialized && r->entropy_total > 128) {
- r->initialized = 1;
- r->entropy_total = 0;
- if (r == &nonblocking_pool) {
+ if (r == &nonblocking_pool) {
+ r->entropy_total += nbits;
+ if (!r->initialized && r->entropy_total > 128) {
+ r->initialized = 1;
prandom_reseed_late();
pr_notice("random: %s pool is initialized\n", r->name);
}
@@ -674,6 +674,7 @@ retry:

trace_credit_entropy_bits(r->name, nbits,
entropy_count >> ENTROPY_SHIFT,
+ r->entropy_since_push,
r->entropy_total, _RET_IP_);

if (r == &input_pool) {
@@ -689,9 +690,9 @@ retry:
* forth between them, until the output pools are 75%
* full.
*/
+ r->entropy_since_push += nbits;
if (entropy_bits > random_write_wakeup_bits &&
- r->initialized &&
- r->entropy_total >= 2*random_read_wakeup_bits) {
+ r->entropy_since_push >= 2*random_read_wakeup_bits) {
static struct entropy_store *last = &blocking_pool;
struct entropy_store *other = &blocking_pool;

@@ -703,7 +704,7 @@ retry:
if (last->entropy_count <=
3 * last->poolinfo->poolfracbits / 4) {
schedule_work(&last->push_work);
- r->entropy_total = 0;
+ r->entropy_since_push = 0;
}
}
}
diff --git a/include/trace/events/random.h b/include/trace/events/random.h
index 805af6db4..4edf5ceb5 100644
--- a/include/trace/events/random.h
+++ b/include/trace/events/random.h
@@ -61,29 +61,33 @@ DEFINE_EVENT(random__mix_pool_bytes, mix_pool_bytes_nolock,

TRACE_EVENT(credit_entropy_bits,
TP_PROTO(const char *pool_name, int bits, int entropy_count,
- int entropy_total, unsigned long IP),
+ int entropy_since_push, int entropy_total, unsigned long IP),

- TP_ARGS(pool_name, bits, entropy_count, entropy_total, IP),
+ TP_ARGS(pool_name, bits, entropy_count, entropy_since_push,
+ entropy_total, IP),

TP_STRUCT__entry(
__field( const char *, pool_name )
__field( int, bits )
__field( int, entropy_count )
+ __field( int, entropy_since_push )
__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;
+ __entry->pool_name = pool_name;
+ __entry->bits = bits;
+ __entry->entropy_count = entropy_count;
+ __entry->entropy_since_push = entropy_since_push;
+ __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,
+ TP_printk("%s pool: bits %d entropy_count %d entropy_since_push %d "
+ "entropy_total %d caller %pF", __entry->pool_name,
+ __entry->bits, __entry->entropy_count,
+ __entry->entropy_since_push, __entry->entropy_total,
(void *)__entry->IP)
);

--
1.8.3.2


\
 
 \ /
  Last update: 2013-12-15 03:21    [W:0.052 / U:0.316 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site