From: Jens Axboe Date: Mon, 21 Jan 2013 16:42:49 +0000 (-0700) Subject: lfsr: add lfsr_reset() X-Git-Tag: fio-2.0.14~114 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=0415406ff0a7ced100565c4cba1322705b7fdb0a;ds=sidebyside lfsr: add lfsr_reset() This enables us to restart a sequence. Signed-off-by: Jens Axboe --- 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; } diff --git a/lib/lfsr.h b/lib/lfsr.h index 898646e2..45d7028c 100644 --- a/lib/lfsr.h +++ b/lib/lfsr.h @@ -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