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 Original line 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
	   work on top of UBI. Do not enable this unless you use legacy
	   software.
	   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
endif # MTD_UBI

drivers/mtd/ubi/Kconfig.debug

deleted100644 → 0
+0 −37
Original line number Original line 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 Original line 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.
	 * checks @ubi->thread_enabled. Otherwise we may fail to wake it up.
	 */
	 */
	spin_lock(&ubi->wl_lock);
	spin_lock(&ubi->wl_lock);
	if (!DBG_DISABLE_BGT)
	ubi->thread_enabled = 1;
	ubi->thread_enabled = 1;
	wake_up_process(ubi->bgt_thread);
	wake_up_process(ubi->bgt_thread);
	spin_unlock(&ubi->wl_lock);
	spin_unlock(&ubi->wl_lock);
+3 −0
Original line number Original line Diff line number Diff line
@@ -32,12 +32,15 @@


unsigned int ubi_msg_flags;
unsigned int ubi_msg_flags;
unsigned int ubi_chk_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_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_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_msgs, "Debug message type flags");
MODULE_PARM_DESC(debug_chks, "Debug check 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.
 * ubi_dbg_dump_ec_hdr - dump an erase counter header.
+36 −20
Original line number Original line 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 ubi_dbg_check_write(struct ubi_device *ubi, const void *buf, int pnum,
			int offset, int len);
			int offset, int len);


#ifdef CONFIG_MTD_UBI_DEBUG_DISABLE_BGT
extern unsigned int ubi_tst_flags;
#define DBG_DISABLE_BGT 1

#else
/*
#define DBG_DISABLE_BGT 0
 * Special testing flags.
#endif
 *
 * 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.
 * 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)
static inline int ubi_dbg_is_bitflip(void)
{
{
	if (ubi_tst_flags & UBI_TST_EMULATE_BITFLIPS)
		return !(random32() % 200);
		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.
 * 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)
static inline int ubi_dbg_is_write_failure(void)
{
{
	if (ubi_tst_flags & UBI_TST_EMULATE_WRITE_FAILURES)
		return !(random32() % 500);
		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.
 * 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)
static inline int ubi_dbg_is_erase_failure(void)
{
{
	if (ubi_tst_flags & UBI_TST_EMULATE_ERASE_FAILURES)
		return !(random32() % 400);
		return !(random32() % 400);
	return 0;
}
}
#else
#define ubi_dbg_is_erase_failure() 0
#endif


#else
#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_dump_flash(ubi, pnum, offset, len) ({})
#define ubi_dbg_print_hex_dump(l, ps, pt, r, g, b, len, a)  ({})
#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_bitflip()       0
#define ubi_dbg_is_write_failure() 0
#define ubi_dbg_is_write_failure() 0
#define ubi_dbg_is_erase_failure() 0
#define ubi_dbg_is_erase_failure() 0
Loading