diff options
Diffstat (limited to 'drivers/mtd/tests/mtd_subpagetest.c')
| -rw-r--r-- | drivers/mtd/tests/mtd_subpagetest.c | 42 | 
1 files changed, 12 insertions, 30 deletions
diff --git a/drivers/mtd/tests/mtd_subpagetest.c b/drivers/mtd/tests/mtd_subpagetest.c index c880c2229c5..aade56f2794 100644 --- a/drivers/mtd/tests/mtd_subpagetest.c +++ b/drivers/mtd/tests/mtd_subpagetest.c @@ -28,6 +28,7 @@  #include <linux/mtd/mtd.h>  #include <linux/slab.h>  #include <linux/sched.h> +#include <linux/random.h>  static int dev = -EINVAL;  module_param(dev, int, S_IRUGO); @@ -43,26 +44,7 @@ static int bufsize;  static int ebcnt;  static int pgcnt;  static int errcnt; -static unsigned long next = 1; - -static inline unsigned int simple_rand(void) -{ -	next = next * 1103515245 + 12345; -	return (unsigned int)((next / 65536) % 32768); -} - -static inline void simple_srand(unsigned long seed) -{ -	next = seed; -} - -static void set_random_data(unsigned char *buf, size_t len) -{ -	size_t i; - -	for (i = 0; i < len; ++i) -		buf[i] = simple_rand(); -} +static struct rnd_state rnd_state;  static inline void clear_data(unsigned char *buf, size_t len)  { @@ -119,7 +101,7 @@ static int write_eraseblock(int ebnum)  	int err = 0;  	loff_t addr = ebnum * mtd->erasesize; -	set_random_data(writebuf, subpgsize); +	prandom_bytes_state(&rnd_state, writebuf, subpgsize);  	err = mtd_write(mtd, addr, subpgsize, &written, writebuf);  	if (unlikely(err || written != subpgsize)) {  		pr_err("error: write failed at %#llx\n", @@ -133,7 +115,7 @@ static int write_eraseblock(int ebnum)  	addr += subpgsize; -	set_random_data(writebuf, subpgsize); +	prandom_bytes_state(&rnd_state, writebuf, subpgsize);  	err = mtd_write(mtd, addr, subpgsize, &written, writebuf);  	if (unlikely(err || written != subpgsize)) {  		pr_err("error: write failed at %#llx\n", @@ -157,7 +139,7 @@ static int write_eraseblock2(int ebnum)  	for (k = 1; k < 33; ++k) {  		if (addr + (subpgsize * k) > (ebnum + 1) * mtd->erasesize)  			break; -		set_random_data(writebuf, subpgsize * k); +		prandom_bytes_state(&rnd_state, writebuf, subpgsize * k);  		err = mtd_write(mtd, addr, subpgsize * k, &written, writebuf);  		if (unlikely(err || written != subpgsize * k)) {  			pr_err("error: write failed at %#llx\n", @@ -193,7 +175,7 @@ static int verify_eraseblock(int ebnum)  	int err = 0;  	loff_t addr = ebnum * mtd->erasesize; -	set_random_data(writebuf, subpgsize); +	prandom_bytes_state(&rnd_state, writebuf, subpgsize);  	clear_data(readbuf, subpgsize);  	err = mtd_read(mtd, addr, subpgsize, &read, readbuf);  	if (unlikely(err || read != subpgsize)) { @@ -220,7 +202,7 @@ static int verify_eraseblock(int ebnum)  	addr += subpgsize; -	set_random_data(writebuf, subpgsize); +	prandom_bytes_state(&rnd_state, writebuf, subpgsize);  	clear_data(readbuf, subpgsize);  	err = mtd_read(mtd, addr, subpgsize, &read, readbuf);  	if (unlikely(err || read != subpgsize)) { @@ -257,7 +239,7 @@ static int verify_eraseblock2(int ebnum)  	for (k = 1; k < 33; ++k) {  		if (addr + (subpgsize * k) > (ebnum + 1) * mtd->erasesize)  			break; -		set_random_data(writebuf, subpgsize * k); +		prandom_bytes_state(&rnd_state, writebuf, subpgsize * k);  		clear_data(readbuf, subpgsize * k);  		err = mtd_read(mtd, addr, subpgsize * k, &read, readbuf);  		if (unlikely(err || read != subpgsize * k)) { @@ -430,7 +412,7 @@ static int __init mtd_subpagetest_init(void)  		goto out;  	pr_info("writing whole device\n"); -	simple_srand(1); +	prandom_seed_state(&rnd_state, 1);  	for (i = 0; i < ebcnt; ++i) {  		if (bbt[i])  			continue; @@ -443,7 +425,7 @@ static int __init mtd_subpagetest_init(void)  	}  	pr_info("written %u eraseblocks\n", i); -	simple_srand(1); +	prandom_seed_state(&rnd_state, 1);  	pr_info("verifying all eraseblocks\n");  	for (i = 0; i < ebcnt; ++i) {  		if (bbt[i]) @@ -466,7 +448,7 @@ static int __init mtd_subpagetest_init(void)  		goto out;  	/* Write all eraseblocks */ -	simple_srand(3); +	prandom_seed_state(&rnd_state, 3);  	pr_info("writing whole device\n");  	for (i = 0; i < ebcnt; ++i) {  		if (bbt[i]) @@ -481,7 +463,7 @@ static int __init mtd_subpagetest_init(void)  	pr_info("written %u eraseblocks\n", i);  	/* Check all eraseblocks */ -	simple_srand(3); +	prandom_seed_state(&rnd_state, 3);  	pr_info("verifying all eraseblocks\n");  	for (i = 0; i < ebcnt; ++i) {  		if (bbt[i])  |