diff --git a/drivers/mtd/tests/torturetest.c b/drivers/mtd/tests/torturetest.c index 6787ac5471a9..51256a4dfb82 100644 --- a/drivers/mtd/tests/torturetest.c +++ b/drivers/mtd/tests/torturetest.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include "mtd_test.h" @@ -54,8 +55,14 @@ module_param(cycles_count, uint, S_IRUGO); MODULE_PARM_DESC(cycles_count, "how many erase cycles to do " "(infinite by default)"); +static int random_pattern; +module_param(random_pattern, int, S_IRUGO); +MODULE_PARM_DESC(random_pattern, "if choose random pattern to program"); + static struct mtd_info *mtd; +/* This buffer contains random pattern */ +static unsigned char *patt_random; /* This buffer contains 0x555555...0xAAAAAA... pattern */ static unsigned char *patt_5A5; /* This buffer contains 0xAAAAAA...0x555555... pattern */ @@ -210,9 +217,13 @@ static int __init tort_init(void) } err = -ENOMEM; + patt_random = kmalloc(mtd->erasesize, GFP_KERNEL); + if (!patt_random) + goto out_mtd; + patt_5A5 = kmalloc(mtd->erasesize, GFP_KERNEL); if (!patt_5A5) - goto out_mtd; + goto out_patt_random; patt_A5A = kmalloc(mtd->erasesize, GFP_KERNEL); if (!patt_A5A) @@ -244,6 +255,8 @@ static int __init tort_init(void) } } + prandom_bytes(patt_random, mtd->erasesize); + err = mtdtest_scan_for_bad_eraseblocks(mtd, bad_ebs, eb, ebcnt); if (err) goto out; @@ -283,6 +296,8 @@ static int __init tort_init(void) patt = patt_5A5; else patt = patt_A5A; + if (random_pattern) + patt = patt_random; err = write_pattern(i, patt); if (err) goto out; @@ -301,8 +316,14 @@ static int __init tort_init(void) patt = patt_5A5; else patt = patt_A5A; + if (random_pattern) + patt = patt_random; err = check_eraseblock(i, patt); if (err) { + if (random_pattern) { + pr_info("verify failed for random pattern\n"); + goto out; + } pr_info("verify failed for %s" " pattern\n", ((eb + erase_cycles) & 1) ? @@ -345,6 +366,8 @@ out_patt_A5A: kfree(patt_A5A); out_patt_5A5: kfree(patt_5A5); +out_patt_random: + kfree(patt_random); out_mtd: put_mtd_device(mtd); if (err)