mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 01:34:14 +08:00
UBI: switch debugging tests knobs to debugfs
Kill the UBI 'debug_tsts' module parameter and switch to debugfs. Create per-test mode files there. E.g., to enable bit-flips emulation you may just do: echo 1 > /sys/kernel/debug/ubi/ubi0/tst_emulate_bitflips Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
This commit is contained in:
parent
1807373324
commit
cd6d8567a4
@ -30,13 +30,6 @@
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
|
||||
unsigned int ubi_tst_flags;
|
||||
|
||||
module_param_named(debug_tsts, ubi_tst_flags, uint, S_IRUGO | S_IWUSR);
|
||||
|
||||
MODULE_PARM_DESC(debug_tsts, "Debug special test flags");
|
||||
|
||||
/**
|
||||
* ubi_dbg_dump_ec_hdr - dump an erase counter header.
|
||||
@ -318,6 +311,12 @@ static ssize_t dfs_file_read(struct file *file, char __user *user_buf,
|
||||
val = d->chk_gen;
|
||||
else if (dent == d->dfs_chk_io)
|
||||
val = d->chk_io;
|
||||
else if (dent == d->dfs_disable_bgt)
|
||||
val = d->disable_bgt;
|
||||
else if (dent == d->dfs_emulate_bitflips)
|
||||
val = d->emulate_bitflips;
|
||||
else if (dent == d->dfs_emulate_io_failures)
|
||||
val = d->emulate_io_failures;
|
||||
else {
|
||||
count = -EINVAL;
|
||||
goto out;
|
||||
@ -373,6 +372,12 @@ static ssize_t dfs_file_write(struct file *file, const char __user *user_buf,
|
||||
d->chk_gen = val;
|
||||
else if (dent == d->dfs_chk_io)
|
||||
d->chk_io = val;
|
||||
else if (dent == d->dfs_disable_bgt)
|
||||
d->disable_bgt = val;
|
||||
else if (dent == d->dfs_emulate_bitflips)
|
||||
d->emulate_bitflips = val;
|
||||
else if (dent == d->dfs_emulate_io_failures)
|
||||
d->emulate_io_failures = val;
|
||||
else
|
||||
count = -EINVAL;
|
||||
|
||||
@ -442,6 +447,27 @@ int ubi_debugfs_init_dev(struct ubi_device *ubi)
|
||||
goto out_remove;
|
||||
d->dfs_chk_io = dent;
|
||||
|
||||
fname = "tst_disable_bgt";
|
||||
dent = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, (void *)ubi_num,
|
||||
&dfs_fops);
|
||||
if (IS_ERR_OR_NULL(dent))
|
||||
goto out_remove;
|
||||
d->dfs_disable_bgt = dent;
|
||||
|
||||
fname = "tst_emulate_bitflips";
|
||||
dent = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, (void *)ubi_num,
|
||||
&dfs_fops);
|
||||
if (IS_ERR_OR_NULL(dent))
|
||||
goto out_remove;
|
||||
d->dfs_emulate_bitflips = dent;
|
||||
|
||||
fname = "tst_emulate_io_failures";
|
||||
dent = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, (void *)ubi_num,
|
||||
&dfs_fops);
|
||||
if (IS_ERR_OR_NULL(dent))
|
||||
goto out_remove;
|
||||
d->dfs_emulate_io_failures = dent;
|
||||
|
||||
return 0;
|
||||
|
||||
out_remove:
|
||||
|
@ -85,35 +85,30 @@ void ubi_debugfs_exit_dev(struct ubi_device *ubi);
|
||||
*
|
||||
* @chk_gen: if UBI general extra checks are enabled
|
||||
* @chk_io: if UBI I/O extra checks are enabled
|
||||
* @disable_bgt: disable the background task for testing purposes
|
||||
* @emulate_bitflips: emulate bit-flips for testing purposes
|
||||
* @emulate_io_failures: emulate write/erase failures for testing purposes
|
||||
* @dfs_dir_name: name of debugfs directory containing files of this UBI device
|
||||
* @dfs_dir: direntry object of the UBI device debugfs directory
|
||||
* @dfs_chk_gen: debugfs knob to enable UBI general extra checks
|
||||
* @dfs_chk_io: debugfs knob to enable UBI I/O extra checks
|
||||
* @dfs_disable_bgt: debugfs knob to disable the background task
|
||||
* @dfs_emulate_bitflips: debugfs knob to emulate bit-flips
|
||||
* @dfs_emulate_io_failures: debugfs knob to emulate write/erase failures
|
||||
*/
|
||||
struct ubi_debug_info {
|
||||
unsigned int chk_gen:1;
|
||||
unsigned int chk_io:1;
|
||||
unsigned int disable_bgt:1;
|
||||
unsigned int emulate_bitflips:1;
|
||||
unsigned int emulate_io_failures:1;
|
||||
char dfs_dir_name[UBI_DFS_DIR_LEN + 1];
|
||||
struct dentry *dfs_dir;
|
||||
struct dentry *dfs_chk_gen;
|
||||
struct dentry *dfs_chk_io;
|
||||
};
|
||||
|
||||
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,
|
||||
struct dentry *dfs_disable_bgt;
|
||||
struct dentry *dfs_emulate_bitflips;
|
||||
struct dentry *dfs_emulate_io_failures;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -125,7 +120,7 @@ enum {
|
||||
*/
|
||||
static inline int ubi_dbg_is_bgt_disabled(const struct ubi_device *ubi)
|
||||
{
|
||||
return ubi_tst_flags & UBI_TST_DISABLE_BGT;
|
||||
return ubi->dbg->disable_bgt;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -136,7 +131,7 @@ static inline int ubi_dbg_is_bgt_disabled(const struct ubi_device *ubi)
|
||||
*/
|
||||
static inline int ubi_dbg_is_bitflip(const struct ubi_device *ubi)
|
||||
{
|
||||
if (ubi_tst_flags & UBI_TST_EMULATE_BITFLIPS)
|
||||
if (ubi->dbg->emulate_bitflips)
|
||||
return !(random32() % 200);
|
||||
return 0;
|
||||
}
|
||||
@ -150,7 +145,7 @@ static inline int ubi_dbg_is_bitflip(const struct ubi_device *ubi)
|
||||
*/
|
||||
static inline int ubi_dbg_is_write_failure(const struct ubi_device *ubi)
|
||||
{
|
||||
if (ubi_tst_flags & UBI_TST_EMULATE_WRITE_FAILURES)
|
||||
if (ubi->dbg->emulate_io_failures)
|
||||
return !(random32() % 500);
|
||||
return 0;
|
||||
}
|
||||
@ -164,7 +159,7 @@ static inline int ubi_dbg_is_write_failure(const struct ubi_device *ubi)
|
||||
*/
|
||||
static inline int ubi_dbg_is_erase_failure(const struct ubi_device *ubi)
|
||||
{
|
||||
if (ubi_tst_flags & UBI_TST_EMULATE_ERASE_FAILURES)
|
||||
if (ubi->dbg->emulate_io_failures)
|
||||
return !(random32() % 400);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user