diff options
Diffstat (limited to 'drivers/mtd/ubi/debug.h')
| -rw-r--r-- | drivers/mtd/ubi/debug.h | 113 | 
1 files changed, 66 insertions, 47 deletions
diff --git a/drivers/mtd/ubi/debug.h b/drivers/mtd/ubi/debug.h index 3f1a09c5c438..65b5b76cc379 100644 --- a/drivers/mtd/ubi/debug.h +++ b/drivers/mtd/ubi/debug.h @@ -21,14 +21,6 @@  #ifndef __UBI_DEBUG_H__  #define __UBI_DEBUG_H__ -struct ubi_ec_hdr; -struct ubi_vid_hdr; -struct ubi_volume; -struct ubi_vtbl_record; -struct ubi_scan_volume; -struct ubi_scan_leb; -struct ubi_mkvol_req; -  #ifdef CONFIG_MTD_UBI_DEBUG  #include <linux/random.h> @@ -71,86 +63,103 @@ void ubi_dbg_dump_sv(const struct ubi_scan_volume *sv);  void ubi_dbg_dump_seb(const struct ubi_scan_leb *seb, int type);  void ubi_dbg_dump_mkvol_req(const struct ubi_mkvol_req *req);  void ubi_dbg_dump_flash(struct ubi_device *ubi, int pnum, int offset, int len); - -extern unsigned int ubi_chk_flags; - -/* - * Debugging check flags. - * - * UBI_CHK_GEN: general checks - * UBI_CHK_IO: check writes and erases - */ -enum { -	UBI_CHK_GEN = 0x1, -	UBI_CHK_IO  = 0x2, -}; -  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); - -extern unsigned int ubi_tst_flags; +int ubi_debugging_init_dev(struct ubi_device *ubi); +void ubi_debugging_exit_dev(struct ubi_device *ubi); +int ubi_debugfs_init(void); +void ubi_debugfs_exit(void); +int ubi_debugfs_init_dev(struct ubi_device *ubi); +void ubi_debugfs_exit_dev(struct ubi_device *ubi);  /* - * Special testing flags. + * The UBI debugfs directory name pattern and maximum name length (3 for "ubi" + * + 2 for the number plus 1 for the trailing zero byte. + */ +#define UBI_DFS_DIR_NAME "ubi%d" +#define UBI_DFS_DIR_LEN  (3 + 2 + 1) + +/** + * struct ubi_debug_info - debugging information for an UBI device.   * - * 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 + * @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   */ -enum { -	UBI_TST_DISABLE_BGT            = 0x1, -	UBI_TST_EMULATE_BITFLIPS       = 0x2, -	UBI_TST_EMULATE_WRITE_FAILURES = 0x4, -	UBI_TST_EMULATE_ERASE_FAILURES = 0x8, +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; +	struct dentry *dfs_disable_bgt; +	struct dentry *dfs_emulate_bitflips; +	struct dentry *dfs_emulate_io_failures;  };  /**   * ubi_dbg_is_bgt_disabled - if the background thread is disabled. + * @ubi: UBI device description object   *   * Returns non-zero if the UBI background thread is disabled for testing   * purposes.   */ -static inline int ubi_dbg_is_bgt_disabled(void) +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;  }  /**   * ubi_dbg_is_bitflip - if it is time to emulate a bit-flip. + * @ubi: UBI device description object   *   * Returns non-zero if a bit-flip should be emulated, otherwise returns zero.   */ -static inline int ubi_dbg_is_bitflip(void) +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;  }  /**   * ubi_dbg_is_write_failure - if it is time to emulate a write failure. + * @ubi: UBI device description object   *   * Returns non-zero if a write failure should be emulated, otherwise returns   * zero.   */ -static inline int ubi_dbg_is_write_failure(void) +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;  }  /**   * ubi_dbg_is_erase_failure - if its time to emulate an erase failure. + * @ubi: UBI device description object   *   * Returns non-zero if an erase failure should be emulated, otherwise returns   * zero.   */ -static inline int ubi_dbg_is_erase_failure(void) +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;  } @@ -201,11 +210,6 @@ static inline void ubi_dbg_dump_flash(struct ubi_device *ubi,  static inline void  ubi_dbg_print_hex_dump(const char *l, const char *ps, int pt, int r,  		       int g, const void *b, size_t len, bool a)     { return; } - -static inline int ubi_dbg_is_bgt_disabled(void)                    { return 0; } -static inline int ubi_dbg_is_bitflip(void)                         { return 0; } -static inline int ubi_dbg_is_write_failure(void)                   { return 0; } -static inline int ubi_dbg_is_erase_failure(void)                   { return 0; }  static inline int ubi_dbg_check_all_ff(struct ubi_device *ubi,  				       int pnum, int offset,  				       int len)                    { return 0; } @@ -213,5 +217,20 @@ static inline int ubi_dbg_check_write(struct ubi_device *ubi,  				      const void *buf, int pnum,  				      int offset, int len)         { return 0; } +static inline int ubi_debugging_init_dev(struct ubi_device *ubi)   { return 0; } +static inline void ubi_debugging_exit_dev(struct ubi_device *ubi)  { return; } +static inline int ubi_debugfs_init(void)                           { return 0; } +static inline void ubi_debugfs_exit(void)                          { return; } +static inline int ubi_debugfs_init_dev(struct ubi_device *ubi)     { return 0; } +static inline void ubi_debugfs_exit_dev(struct ubi_device *ubi)    { return; } + +static inline int +ubi_dbg_is_bgt_disabled(const struct ubi_device *ubi)              { return 0; } +static inline int ubi_dbg_is_bitflip(const struct ubi_device *ubi) { return 0; } +static inline int +ubi_dbg_is_write_failure(const struct ubi_device *ubi)             { return 0; } +static inline int +ubi_dbg_is_erase_failure(const struct ubi_device *ubi)             { return 0; } +  #endif /* !CONFIG_MTD_UBI_DEBUG */  #endif /* !__UBI_DEBUG_H__ */  |