lfsr: add lfsr_reset()
authorJens Axboe <axboe@kernel.dk>
Mon, 21 Jan 2013 16:42:49 +0000 (09:42 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 21 Jan 2013 16:42:49 +0000 (09:42 -0700)
This enables us to restart a sequence.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
lib/lfsr.c
lib/lfsr.h

index 975c6a5aaf6b813e5a1d4e6bd7ec63e65e67a5ae..61a3aaf3e6532c32722314da125bcce69cf98416 100644 (file)
@@ -244,6 +244,17 @@ static struct lfsr_taps *find_lfsr(uint64_t size)
        return NULL;
 }
 
+void lfsr_reset(struct fio_lfsr *fl, unsigned long seed)
+{
+       unsigned int i;
+
+       fl->last_val = seed;
+       fl->num_vals = 0;
+
+       for (i = 0; i < FIO_LFSR_CRANKS; i++)
+               fl->last_val = __lfsr_next(fl->last_val, &fl->taps);
+}
+
 int lfsr_init(struct fio_lfsr *fl, uint64_t size, unsigned long seed)
 {
        struct lfsr_taps *tap;
@@ -253,18 +264,15 @@ int lfsr_init(struct fio_lfsr *fl, uint64_t size, unsigned long seed)
        if (!tap)
                return 1;
 
-       fl->last_val = seed;
        fl->max_val = size - 1;
-       fl->num_vals = 0;
        fl->taps.length = tap->length;
+
        for (i = 0; i < FIO_MAX_TAPS; i++) {
                fl->taps.taps[i] = tap->taps[i];
                if (!fl->taps.taps[i])
                        break;
        }
 
-       for (i = 0; i < FIO_LFSR_CRANKS; i++)
-               fl->last_val = __lfsr_next(fl->last_val, &fl->taps);
-
+       lfsr_reset(fl, seed);
        return 0;
 }
index 898646e27b4207cbec289a675aa669d9a660d626..45d7028c49731f4f647d8977c26348a97f812b48 100644 (file)
@@ -20,5 +20,6 @@ struct fio_lfsr {
 
 int lfsr_next(struct fio_lfsr *fl, uint64_t *off, uint64_t);
 int lfsr_init(struct fio_lfsr *fl, uint64_t size, unsigned long seed);
+void lfsr_reset(struct fio_lfsr *fl, unsigned long seed);
 
 #endif