this is a demonstration of using TIMEOUT_INITIALIZED().

because we know the timeout is always set up correctly, we dont
have to test for it all over the place.

Index: rnd.c
===================================================================
RCS file: /cvs/src/sys/dev/rnd.c,v
retrieving revision 1.145
diff -u -p -r1.145 rnd.c
--- rnd.c       2 Nov 2013 19:37:25 -0000       1.145
+++ rnd.c       9 Dec 2013 03:53:45 -0000
@@ -212,6 +212,10 @@ struct timer_rand_state {  /* There is on
 #define QEVSLOW (QEVLEN * 3 / 4) /* yet another 0.75 for 60-minutes hour /-; */
 #define QEVSBITS 10
 
+void   dequeue_randomness(void *);
+void   add_entropy_words(const u_int32_t *, u_int);
+void   extract_entropy(u_int8_t *, int);
+
 struct rand_event {
        struct timer_rand_state *re_state;
        u_int re_nbits;
@@ -221,17 +225,13 @@ struct rand_event {
 struct rand_event *rnd_event_head = rnd_event_space;
 struct rand_event *rnd_event_tail = rnd_event_space;
 
-struct timeout rnd_timeout;
+struct timeout rnd_timeout = TIMEOUT_INITIALIZER(dequeue_randomness, NULL);
 struct rndstats rndstats;
 
 u_int32_t entropy_pool[POOLWORDS];
 u_int  entropy_add_ptr;
 u_char entropy_input_rotate;
 
-void   dequeue_randomness(void *);
-void   add_entropy_words(const u_int32_t *, u_int);
-void   extract_entropy(u_int8_t *, int);
-
 int    filt_randomread(struct knote *, long);
 void   filt_randomdetach(struct knote *);
 int    filt_randomwrite(struct knote *, long);
@@ -303,8 +303,7 @@ enqueue_randomness(int state, int val)
                return;
 #endif
 
-       if (timeout_initialized(&rnd_timeout))
-               nanotime(&ts);
+       nanotime(&ts);
 
        p = &rnd_states[state];
        val += state << 13;
@@ -392,8 +391,7 @@ enqueue_randomness(int state, int val)
        rndstats.rnd_sc[state]++;
        rndstats.rnd_sb[state] += nbits;
 
-       if (rnd_qlen() > QEVSLOW/2 && timeout_initialized(&rnd_timeout) &&
-           !timeout_pending(&rnd_timeout))
+       if (rnd_qlen() > QEVSLOW/2 && !timeout_pending(&rnd_timeout))
                timeout_add(&rnd_timeout, 1);
 done:
        mtx_leave(&entropylock);
@@ -461,8 +459,7 @@ dequeue_randomness(void *v)
 
        mtx_enter(&entropylock);
 
-       if (timeout_initialized(&rnd_timeout))
-               timeout_del(&rnd_timeout);
+       timeout_del(&rnd_timeout);
 
        rndstats.rnd_deqs++;
        while ((rep = rnd_get())) {
@@ -778,7 +775,6 @@ random_start(void)
        task_set(&arc4_task, arc4_init, NULL, NULL);
        timeout_set(&arc4_timeout, arc4_reinit, NULL);
        arc4_reinit(NULL);
-       timeout_set(&rnd_timeout, dequeue_randomness, NULL);
 }
 
 void

Reply via email to