diff options
| author | Akinobu Mita <akinobu.mita@gmail.com> | 2013-02-27 20:05:39 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-27 22:10:23 -0500 |
| commit | a312b78b0ad6abb38f606ef5dd31e2a1b4469989 (patch) | |
| tree | 570eb9be969aafeb7f46a8b253cccddde9b985cb /drivers/mtd/tests | |
| parent | 99672f32aa4ba0f0cc3e8a15f3c0614e63c2851b (diff) | |
mtd: mtd_subpagetest: convert to use prandom library
This removes home-brewed pseudo-random number generator and use
prandom library.
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Artem Bityutskiy <dedekind1@gmail.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: "Theodore Ts'o" <tytso@mit.edu>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Laight <david.laight@aculab.com>
Cc: Eilon Greenstein <eilong@broadcom.com>
Cc: Michel Lespinasse <walken@google.com>
Cc: Robert Love <robert.w.love@intel.com>
Cc: Valdis Kletnieks <valdis.kletnieks@vt.edu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/mtd/tests')
| -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 c880c2229c59..aade56f27945 100644 --- a/drivers/mtd/tests/mtd_subpagetest.c +++ b/drivers/mtd/tests/mtd_subpagetest.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <linux/mtd/mtd.h> | 28 | #include <linux/mtd/mtd.h> |
| 29 | #include <linux/slab.h> | 29 | #include <linux/slab.h> |
| 30 | #include <linux/sched.h> | 30 | #include <linux/sched.h> |
| 31 | #include <linux/random.h> | ||
| 31 | 32 | ||
| 32 | static int dev = -EINVAL; | 33 | static int dev = -EINVAL; |
| 33 | module_param(dev, int, S_IRUGO); | 34 | module_param(dev, int, S_IRUGO); |
| @@ -43,26 +44,7 @@ static int bufsize; | |||
| 43 | static int ebcnt; | 44 | static int ebcnt; |
| 44 | static int pgcnt; | 45 | static int pgcnt; |
| 45 | static int errcnt; | 46 | static int errcnt; |
| 46 | static unsigned long next = 1; | 47 | static struct rnd_state rnd_state; |
| 47 | |||
| 48 | static inline unsigned int simple_rand(void) | ||
| 49 | { | ||
| 50 | next = next * 1103515245 + 12345; | ||
| 51 | return (unsigned int)((next / 65536) % 32768); | ||
| 52 | } | ||
| 53 | |||
| 54 | static inline void simple_srand(unsigned long seed) | ||
| 55 | { | ||
| 56 | next = seed; | ||
| 57 | } | ||
| 58 | |||
| 59 | static void set_random_data(unsigned char *buf, size_t len) | ||
| 60 | { | ||
| 61 | size_t i; | ||
| 62 | |||
| 63 | for (i = 0; i < len; ++i) | ||
| 64 | buf[i] = simple_rand(); | ||
| 65 | } | ||
| 66 | 48 | ||
| 67 | static inline void clear_data(unsigned char *buf, size_t len) | 49 | static inline void clear_data(unsigned char *buf, size_t len) |
| 68 | { | 50 | { |
| @@ -119,7 +101,7 @@ static int write_eraseblock(int ebnum) | |||
| 119 | int err = 0; | 101 | int err = 0; |
| 120 | loff_t addr = ebnum * mtd->erasesize; | 102 | loff_t addr = ebnum * mtd->erasesize; |
| 121 | 103 | ||
| 122 | set_random_data(writebuf, subpgsize); | 104 | prandom_bytes_state(&rnd_state, writebuf, subpgsize); |
| 123 | err = mtd_write(mtd, addr, subpgsize, &written, writebuf); | 105 | err = mtd_write(mtd, addr, subpgsize, &written, writebuf); |
| 124 | if (unlikely(err || written != subpgsize)) { | 106 | if (unlikely(err || written != subpgsize)) { |
| 125 | pr_err("error: write failed at %#llx\n", | 107 | pr_err("error: write failed at %#llx\n", |
| @@ -133,7 +115,7 @@ static int write_eraseblock(int ebnum) | |||
| 133 | 115 | ||
| 134 | addr += subpgsize; | 116 | addr += subpgsize; |
| 135 | 117 | ||
| 136 | set_random_data(writebuf, subpgsize); | 118 | prandom_bytes_state(&rnd_state, writebuf, subpgsize); |
| 137 | err = mtd_write(mtd, addr, subpgsize, &written, writebuf); | 119 | err = mtd_write(mtd, addr, subpgsize, &written, writebuf); |
| 138 | if (unlikely(err || written != subpgsize)) { | 120 | if (unlikely(err || written != subpgsize)) { |
| 139 | pr_err("error: write failed at %#llx\n", | 121 | pr_err("error: write failed at %#llx\n", |
| @@ -157,7 +139,7 @@ static int write_eraseblock2(int ebnum) | |||
| 157 | for (k = 1; k < 33; ++k) { | 139 | for (k = 1; k < 33; ++k) { |
| 158 | if (addr + (subpgsize * k) > (ebnum + 1) * mtd->erasesize) | 140 | if (addr + (subpgsize * k) > (ebnum + 1) * mtd->erasesize) |
| 159 | break; | 141 | break; |
| 160 | set_random_data(writebuf, subpgsize * k); | 142 | prandom_bytes_state(&rnd_state, writebuf, subpgsize * k); |
| 161 | err = mtd_write(mtd, addr, subpgsize * k, &written, writebuf); | 143 | err = mtd_write(mtd, addr, subpgsize * k, &written, writebuf); |
| 162 | if (unlikely(err || written != subpgsize * k)) { | 144 | if (unlikely(err || written != subpgsize * k)) { |
| 163 | pr_err("error: write failed at %#llx\n", | 145 | pr_err("error: write failed at %#llx\n", |
| @@ -193,7 +175,7 @@ static int verify_eraseblock(int ebnum) | |||
| 193 | int err = 0; | 175 | int err = 0; |
| 194 | loff_t addr = ebnum * mtd->erasesize; | 176 | loff_t addr = ebnum * mtd->erasesize; |
| 195 | 177 | ||
| 196 | set_random_data(writebuf, subpgsize); | 178 | prandom_bytes_state(&rnd_state, writebuf, subpgsize); |
| 197 | clear_data(readbuf, subpgsize); | 179 | clear_data(readbuf, subpgsize); |
| 198 | err = mtd_read(mtd, addr, subpgsize, &read, readbuf); | 180 | err = mtd_read(mtd, addr, subpgsize, &read, readbuf); |
| 199 | if (unlikely(err || read != subpgsize)) { | 181 | if (unlikely(err || read != subpgsize)) { |
| @@ -220,7 +202,7 @@ static int verify_eraseblock(int ebnum) | |||
| 220 | 202 | ||
| 221 | addr += subpgsize; | 203 | addr += subpgsize; |
| 222 | 204 | ||
| 223 | set_random_data(writebuf, subpgsize); | 205 | prandom_bytes_state(&rnd_state, writebuf, subpgsize); |
| 224 | clear_data(readbuf, subpgsize); | 206 | clear_data(readbuf, subpgsize); |
| 225 | err = mtd_read(mtd, addr, subpgsize, &read, readbuf); | 207 | err = mtd_read(mtd, addr, subpgsize, &read, readbuf); |
| 226 | if (unlikely(err || read != subpgsize)) { | 208 | if (unlikely(err || read != subpgsize)) { |
| @@ -257,7 +239,7 @@ static int verify_eraseblock2(int ebnum) | |||
| 257 | for (k = 1; k < 33; ++k) { | 239 | for (k = 1; k < 33; ++k) { |
| 258 | if (addr + (subpgsize * k) > (ebnum + 1) * mtd->erasesize) | 240 | if (addr + (subpgsize * k) > (ebnum + 1) * mtd->erasesize) |
| 259 | break; | 241 | break; |
| 260 | set_random_data(writebuf, subpgsize * k); | 242 | prandom_bytes_state(&rnd_state, writebuf, subpgsize * k); |
| 261 | clear_data(readbuf, subpgsize * k); | 243 | clear_data(readbuf, subpgsize * k); |
| 262 | err = mtd_read(mtd, addr, subpgsize * k, &read, readbuf); | 244 | err = mtd_read(mtd, addr, subpgsize * k, &read, readbuf); |
| 263 | if (unlikely(err || read != subpgsize * k)) { | 245 | if (unlikely(err || read != subpgsize * k)) { |
| @@ -430,7 +412,7 @@ static int __init mtd_subpagetest_init(void) | |||
| 430 | goto out; | 412 | goto out; |
| 431 | 413 | ||
| 432 | pr_info("writing whole device\n"); | 414 | pr_info("writing whole device\n"); |
| 433 | simple_srand(1); | 415 | prandom_seed_state(&rnd_state, 1); |
| 434 | for (i = 0; i < ebcnt; ++i) { | 416 | for (i = 0; i < ebcnt; ++i) { |
| 435 | if (bbt[i]) | 417 | if (bbt[i]) |
| 436 | continue; | 418 | continue; |
| @@ -443,7 +425,7 @@ static int __init mtd_subpagetest_init(void) | |||
| 443 | } | 425 | } |
| 444 | pr_info("written %u eraseblocks\n", i); | 426 | pr_info("written %u eraseblocks\n", i); |
| 445 | 427 | ||
| 446 | simple_srand(1); | 428 | prandom_seed_state(&rnd_state, 1); |
| 447 | pr_info("verifying all eraseblocks\n"); | 429 | pr_info("verifying all eraseblocks\n"); |
| 448 | for (i = 0; i < ebcnt; ++i) { | 430 | for (i = 0; i < ebcnt; ++i) { |
| 449 | if (bbt[i]) | 431 | if (bbt[i]) |
| @@ -466,7 +448,7 @@ static int __init mtd_subpagetest_init(void) | |||
| 466 | goto out; | 448 | goto out; |
| 467 | 449 | ||
| 468 | /* Write all eraseblocks */ | 450 | /* Write all eraseblocks */ |
| 469 | simple_srand(3); | 451 | prandom_seed_state(&rnd_state, 3); |
| 470 | pr_info("writing whole device\n"); | 452 | pr_info("writing whole device\n"); |
| 471 | for (i = 0; i < ebcnt; ++i) { | 453 | for (i = 0; i < ebcnt; ++i) { |
| 472 | if (bbt[i]) | 454 | if (bbt[i]) |
| @@ -481,7 +463,7 @@ static int __init mtd_subpagetest_init(void) | |||
| 481 | pr_info("written %u eraseblocks\n", i); | 463 | pr_info("written %u eraseblocks\n", i); |
| 482 | 464 | ||
| 483 | /* Check all eraseblocks */ | 465 | /* Check all eraseblocks */ |
| 484 | simple_srand(3); | 466 | prandom_seed_state(&rnd_state, 3); |
| 485 | pr_info("verifying all eraseblocks\n"); | 467 | pr_info("verifying all eraseblocks\n"); |
| 486 | for (i = 0; i < ebcnt; ++i) { | 468 | for (i = 0; i < ebcnt; ++i) { |
| 487 | if (bbt[i]) | 469 | if (bbt[i]) |
