Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28237e45 authored by Artem Bityutskiy's avatar Artem Bityutskiy
Browse files

UBI: make tests modes dynamic



Similarly to the debugging checks and message, make the test modes
be dynamically selected via the "debug_tsts" module parameter or
via the "/sys/module/ubi/parameters/debug_tsts" sysfs file. This
is consistent with UBIFS as well.

And now, since all the Kconfig knobs became dynamic, we can remove
the Kconfig.debug file completely.

Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
parent 92d124f5
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -52,6 +52,12 @@ config MTD_UBI_GLUEBI
	   work on top of UBI. Do not enable this unless you use legacy
	   software.

source "drivers/mtd/ubi/Kconfig.debug"
config MTD_UBI_DEBUG
	bool "UBI debugging"
	depends on SYSFS
	select DEBUG_FS
	select KALLSYMS_ALL if KALLSYMS && DEBUG_KERNEL
	help
	  This option enables UBI debugging.

endif # MTD_UBI

drivers/mtd/ubi/Kconfig.debug

deleted100644 → 0
+0 −37
Original line number Diff line number Diff line
comment "UBI debugging options"

config MTD_UBI_DEBUG
	bool "UBI debugging"
	depends on SYSFS
	select DEBUG_FS
	select KALLSYMS_ALL if KALLSYMS && DEBUG_KERNEL
	help
	  This option enables UBI debugging.

if MTD_UBI_DEBUG

config MTD_UBI_DEBUG_DISABLE_BGT
	bool "Do not enable the UBI background thread"
	help
	  This option switches the background thread off by default. The thread
	  may be also be enabled/disabled via UBI sysfs.

config MTD_UBI_DEBUG_EMULATE_BITFLIPS
	bool "Emulate flash bit-flips"
	help
	  This option emulates bit-flips with probability 1/50, which in turn
	  causes scrubbing. Useful for debugging and stressing UBI.

config MTD_UBI_DEBUG_EMULATE_WRITE_FAILURES
	bool "Emulate flash write failures"
	help
	  This option emulates write failures with probability 1/100. Useful for
	  debugging and testing how UBI handlines errors.

config MTD_UBI_DEBUG_EMULATE_ERASE_FAILURES
	bool "Emulate flash erase failures"
	help
	  This option emulates erase failures with probability 1/100. Useful for
	  debugging and testing how UBI handlines errors.

endif # MTD_UBI_DEBUG
+1 −2
Original line number Diff line number Diff line
@@ -986,7 +986,6 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num, int vid_hdr_offset)
	 * checks @ubi->thread_enabled. Otherwise we may fail to wake it up.
	 */
	spin_lock(&ubi->wl_lock);
	if (!DBG_DISABLE_BGT)
	ubi->thread_enabled = 1;
	wake_up_process(ubi->bgt_thread);
	spin_unlock(&ubi->wl_lock);
+3 −0
Original line number Diff line number Diff line
@@ -32,12 +32,15 @@

unsigned int ubi_msg_flags;
unsigned int ubi_chk_flags;
unsigned int ubi_tst_flags;

module_param_named(debug_msgs, ubi_msg_flags, uint, S_IRUGO | S_IWUSR);
module_param_named(debug_chks, ubi_chk_flags, uint, S_IRUGO | S_IWUSR);
module_param_named(debug_tsts, ubi_chk_flags, uint, S_IRUGO | S_IWUSR);

MODULE_PARM_DESC(debug_msgs, "Debug message type flags");
MODULE_PARM_DESC(debug_chks, "Debug check flags");
MODULE_PARM_DESC(debug_tsts, "Debug special test flags");

/**
 * ubi_dbg_dump_ec_hdr - dump an erase counter header.
+36 −20
Original line number Diff line number Diff line
@@ -116,13 +116,34 @@ int ubi_dbg_check_all_ff(struct ubi_device *ubi, int pnum, int offset, int len);
int ubi_dbg_check_write(struct ubi_device *ubi, const void *buf, int pnum,
			int offset, int len);

#ifdef CONFIG_MTD_UBI_DEBUG_DISABLE_BGT
#define DBG_DISABLE_BGT 1
#else
#define DBG_DISABLE_BGT 0
#endif
extern unsigned int ubi_tst_flags;

/*
 * Special testing flags.
 *
 * UBIFS_TST_DISABLE_BGT: disable the background thread
 * UBI_TST_EMULATE_BITFLIPS: emulate bit-flips
 * UBI_TST_EMULATE_WRITE_FAILURES: emulate write failures
 * UBI_TST_EMULATE_ERASE_FAILURES: emulate erase failures
 */
enum {
	UBI_TST_DISABLE_BGT            = 0x1,
	UBI_TST_EMULATE_BITFLIPS       = 0x2,
	UBI_TST_EMULATE_WRITE_FAILURES = 0x4,
	UBI_TST_EMULATE_ERASE_FAILURES = 0x8,
};

/**
 * ubi_dbg_is_bgt_disabled - if the background thread is disabled.
 *
 * Returns non-zero if the UBI background thread is disabled for testing
 * purposes.
 */
static inline int ubi_dbg_is_bgt_disabled(void)
{
	return ubi_tst_flags & UBI_TST_DISABLE_BGT;
}

#ifdef CONFIG_MTD_UBI_DEBUG_EMULATE_BITFLIPS
/**
 * ubi_dbg_is_bitflip - if it is time to emulate a bit-flip.
 *
@@ -130,13 +151,11 @@ int ubi_dbg_check_write(struct ubi_device *ubi, const void *buf, int pnum,
 */
static inline int ubi_dbg_is_bitflip(void)
{
	if (ubi_tst_flags & UBI_TST_EMULATE_BITFLIPS)
		return !(random32() % 200);
	return 0;
}
#else
#define ubi_dbg_is_bitflip() 0
#endif

#ifdef CONFIG_MTD_UBI_DEBUG_EMULATE_WRITE_FAILURES
/**
 * ubi_dbg_is_write_failure - if it is time to emulate a write failure.
 *
@@ -145,13 +164,11 @@ static inline int ubi_dbg_is_bitflip(void)
 */
static inline int ubi_dbg_is_write_failure(void)
{
	if (ubi_tst_flags & UBI_TST_EMULATE_WRITE_FAILURES)
		return !(random32() % 500);
	return 0;
}
#else
#define ubi_dbg_is_write_failure() 0
#endif

#ifdef CONFIG_MTD_UBI_DEBUG_EMULATE_ERASE_FAILURES
/**
 * ubi_dbg_is_erase_failure - if its time to emulate an erase failure.
 *
@@ -160,11 +177,10 @@ static inline int ubi_dbg_is_write_failure(void)
 */
static inline int ubi_dbg_is_erase_failure(void)
{
	if (ubi_tst_flags & UBI_TST_EMULATE_ERASE_FAILURES)
		return !(random32() % 400);
	return 0;
}
#else
#define ubi_dbg_is_erase_failure() 0
#endif

#else

@@ -187,7 +203,7 @@ static inline int ubi_dbg_is_erase_failure(void)
#define ubi_dbg_dump_flash(ubi, pnum, offset, len) ({})
#define ubi_dbg_print_hex_dump(l, ps, pt, r, g, b, len, a)  ({})

#define DBG_DISABLE_BGT            0
#define ubi_dbg_is_bgt_disabled()  0
#define ubi_dbg_is_bitflip()       0
#define ubi_dbg_is_write_failure() 0
#define ubi_dbg_is_erase_failure() 0
Loading