lfsr: add lfsr_reset()
[fio.git] / lib / lfsr.c
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;
 }