Mercurial > nand-ecoscentric
changeset 3383:060772fa9bb3
nand tests/nand_rwbenchmark.c: Fix infinite loop when all blocks are marked bad.
| author | Ross Younger <wry@ecoscentric.com> |
|---|---|
| date | Sat, 14 Jun 2014 19:11:12 +1200 |
| parents | 61b1701f733f |
| children | 1229083b0af1 |
| files | packages/io/nand/current/ChangeLog packages/io/nand/current/tests/nand_rwbenchmark.c |
| diffstat | 2 files changed, 9 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/io/nand/current/ChangeLog +++ b/packages/io/nand/current/ChangeLog @@ -2,6 +2,10 @@ 2014-08-11 Ross Younger <wry@ecoscentr * nand.c nand_bbt.c nand_synth.c: Make build with recent gcc +2014-06-14 Ross Younger <wry@ecoscentric.com> + * tests/nand_rwbenchmark.c: Fix infinite loop when all + blocks are marked bad. + 2013-09-06 Jonathan Larmour <jifl@eCosCentric.com> * src/nand_bbt.c (LOCK_PAGEBUF, UNLOCK_PAGEBUF, bbti_incorporate_one,
--- a/packages/io/nand/current/tests/nand_rwbenchmark.c +++ b/packages/io/nand/current/tests/nand_rwbenchmark.c @@ -337,7 +337,10 @@ cyg_nand_block_addr find_spare_block(cyg int i,rv; cyg_nand_block_addr b; - for (b=CYG_NAND_PARTITION_NBLOCKS(part)-1; b>=0; b--) { + for (b=CYG_NAND_PARTITION_NBLOCKS(part)-1; b>=1; b--) { + /* Testing for b>=1 means we don't check block 0 for + * availability, but if we get there then realistically + * the device is worn out anyway. So fail the test. */ cyg_nand_page_addr pg = CYG_NAND_BLOCK2PAGEADDR(part->dev, b); rv = cyg_nandp_read_page(part, pg, 0, oob, oobz); if (rv != 0) continue; // bad block? @@ -352,7 +355,7 @@ next: ; } - CYG_TEST_FAIL_EXIT("can't find an untagged block"); + CYG_TEST_FAIL_EXIT("can't find an untagged block - device worn out?"); } CYG_BYTE databuf[CYGNUM_NAND_PAGEBUFFER], testbuf[CYGNUM_NAND_PAGEBUFFER];
