X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=lib%2Flfsr.c;h=61a3aaf3e6532c32722314da125bcce69cf98416;hb=5be4c944e83b32c0c6842130df3dc1d46cd6eb1f;hp=975c6a5aaf6b813e5a1d4e6bd7ec63e65e67a5ae;hpb=7477673323a943b99ea203bb9434661d13a0159c;p=fio.git diff --git a/lib/lfsr.c b/lib/lfsr.c index 975c6a5a..61a3aaf3 100644 --- a/lib/lfsr.c +++ b/lib/lfsr.c @@ -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; }