[PATCH v3 07/11] mtd: mtd_nandecctest: generalize injecting bit errors function for ecc code
Akinobu Mita
akinobu.mita at gmail.com
Mon Sep 3 09:00:02 EDT 2012
In order to inject deliberate bit errors into the ecc code which only
has 3 bytes, this adjusts the bitops usage in inject_single_bit_error()
which is currently only used for injecting into the 256 or 512 bytes
data block.
Signed-off-by: Akinobu Mita <akinobu.mita at gmail.com>
Cc: David Woodhouse <dwmw2 at infradead.org>
Cc: linux-mtd at lists.infradead.org
Cc: Artem Bityutskiy <artem.bityutskiy at linux.intel.com>
---
drivers/mtd/tests/mtd_nandecctest.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/mtd/tests/mtd_nandecctest.c b/drivers/mtd/tests/mtd_nandecctest.c
index d3e8873..0274f73 100644
--- a/drivers/mtd/tests/mtd_nandecctest.c
+++ b/drivers/mtd/tests/mtd_nandecctest.c
@@ -7,13 +7,22 @@
#include <linux/slab.h>
#include <linux/mtd/nand_ecc.h>
+#include <asm/byteorder.h>
+
#if defined(CONFIG_MTD_NAND) || defined(CONFIG_MTD_NAND_MODULE)
+#ifdef __LITTLE_ENDIAN
+#define __change_bit_le(nr, addr) __change_bit(nr, addr)
+#else
+#define __change_bit_le(nr, addr) \
+ __change_bit((nr) ^ ((BITS_PER_LONG - 1) & ~0x7), addr)
+#endif
+
static void inject_single_bit_error(void *data, size_t size)
{
- unsigned long offset = random32() % (size * BITS_PER_BYTE);
+ unsigned int offset = random32() % (size * BITS_PER_BYTE);
- __change_bit(offset, data);
+ __change_bit_le(offset, data);
}
static void dump_data_ecc(void *error_data, void *error_ecc, void *correct_data,
--
1.7.11.4
More information about the linux-mtd
mailing list