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 @@ | |||
21 | #ifndef __UBI_DEBUG_H__ | 21 | #ifndef __UBI_DEBUG_H__ |
22 | #define __UBI_DEBUG_H__ | 22 | #define __UBI_DEBUG_H__ |
23 | 23 | ||
24 | struct ubi_ec_hdr; | ||
25 | struct ubi_vid_hdr; | ||
26 | struct ubi_volume; | ||
27 | struct ubi_vtbl_record; | ||
28 | struct ubi_scan_volume; | ||
29 | struct ubi_scan_leb; | ||
30 | struct ubi_mkvol_req; | ||
31 | |||
32 | #ifdef CONFIG_MTD_UBI_DEBUG | 24 | #ifdef CONFIG_MTD_UBI_DEBUG |
33 | #include <linux/random.h> | 25 | #include <linux/random.h> |
34 | 26 | ||
@@ -71,86 +63,103 @@ void ubi_dbg_dump_sv(const struct ubi_scan_volume *sv); | |||
71 | void ubi_dbg_dump_seb(const struct ubi_scan_leb *seb, int type); | 63 | void ubi_dbg_dump_seb(const struct ubi_scan_leb *seb, int type); |
72 | void ubi_dbg_dump_mkvol_req(const struct ubi_mkvol_req *req); | 64 | void ubi_dbg_dump_mkvol_req(const struct ubi_mkvol_req *req); |
73 | void ubi_dbg_dump_flash(struct ubi_device *ubi, int pnum, int offset, int len); | 65 | void ubi_dbg_dump_flash(struct ubi_device *ubi, int pnum, int offset, int len); |
74 | |||
75 | extern unsigned int ubi_chk_flags; | ||
76 | |||
77 | /* | ||
78 | * Debugging check flags. | ||
79 | * | ||
80 | * UBI_CHK_GEN: general checks | ||
81 | * UBI_CHK_IO: check writes and erases | ||
82 | */ | ||
83 | enum { | ||
84 | UBI_CHK_GEN = 0x1, | ||
85 | UBI_CHK_IO = 0x2, | ||
86 | }; | ||
87 | |||
88 | int ubi_dbg_check_all_ff(struct ubi_device *ubi, int pnum, int offset, int len); | 66 | int ubi_dbg_check_all_ff(struct ubi_device *ubi, int pnum, int offset, int len); |
89 | int ubi_dbg_check_write(struct ubi_device *ubi, const void *buf, int pnum, | 67 | int ubi_dbg_check_write(struct ubi_device *ubi, const void *buf, int pnum, |
90 | int offset, int len); | 68 | int offset, int len); |
91 | 69 | int ubi_debugging_init_dev(struct ubi_device *ubi); | |
92 | extern unsigned int ubi_tst_flags; | 70 | void ubi_debugging_exit_dev(struct ubi_device *ubi); |
71 | int ubi_debugfs_init(void); | ||
72 | void ubi_debugfs_exit(void); | ||
73 | int ubi_debugfs_init_dev(struct ubi_device *ubi); | ||
74 | void ubi_debugfs_exit_dev(struct ubi_device *ubi); | ||
93 | 75 | ||
94 | /* | 76 | /* |
95 | * Special testing flags. | 77 | * The UBI debugfs directory name pattern and maximum name length (3 for "ubi" |
78 | * + 2 for the number plus 1 for the trailing zero byte. | ||
79 | */ | ||
80 | #define UBI_DFS_DIR_NAME "ubi%d" | ||
81 | #define UBI_DFS_DIR_LEN (3 + 2 + 1) | ||
82 | |||
83 | /** | ||
84 | * struct ubi_debug_info - debugging information for an UBI device. | ||
96 | * | 85 | * |
97 | * UBIFS_TST_DISABLE_BGT: disable the background thread | 86 | * @chk_gen: if UBI general extra checks are enabled |
98 | * UBI_TST_EMULATE_BITFLIPS: emulate bit-flips | 87 | * @chk_io: if UBI I/O extra checks are enabled |
99 | * UBI_TST_EMULATE_WRITE_FAILURES: emulate write failures | 88 | * @disable_bgt: disable the background task for testing purposes |
100 | * UBI_TST_EMULATE_ERASE_FAILURES: emulate erase failures | 89 | * @emulate_bitflips: emulate bit-flips for testing purposes |
90 | * @emulate_io_failures: emulate write/erase failures for testing purposes | ||
91 | * @dfs_dir_name: name of debugfs directory containing files of this UBI device | ||
92 | * @dfs_dir: direntry object of the UBI device debugfs directory | ||
93 | * @dfs_chk_gen: debugfs knob to enable UBI general extra checks | ||
94 | * @dfs_chk_io: debugfs knob to enable UBI I/O extra checks | ||
95 | * @dfs_disable_bgt: debugfs knob to disable the background task | ||
96 | * @dfs_emulate_bitflips: debugfs knob to emulate bit-flips | ||
97 | * @dfs_emulate_io_failures: debugfs knob to emulate write/erase failures | ||
101 | */ | 98 | */ |
102 | enum { | 99 | struct ubi_debug_info { |
103 | UBI_TST_DISABLE_BGT = 0x1, | 100 | unsigned int chk_gen:1; |
104 | UBI_TST_EMULATE_BITFLIPS = 0x2, | 101 | unsigned int chk_io:1; |
105 | UBI_TST_EMULATE_WRITE_FAILURES = 0x4, | 102 | unsigned int disable_bgt:1; |
106 | UBI_TST_EMULATE_ERASE_FAILURES = 0x8, | 103 | unsigned int emulate_bitflips:1; |
104 | unsigned int emulate_io_failures:1; | ||
105 | char dfs_dir_name[UBI_DFS_DIR_LEN + 1]; | ||
106 | struct dentry *dfs_dir; | ||
107 | struct dentry *dfs_chk_gen; | ||
108 | struct dentry *dfs_chk_io; | ||
109 | struct dentry *dfs_disable_bgt; | ||
110 | struct dentry *dfs_emulate_bitflips; | ||
111 | struct dentry *dfs_emulate_io_failures; | ||
107 | }; | 112 | }; |
108 | 113 | ||
109 | /** | 114 | /** |
110 | * ubi_dbg_is_bgt_disabled - if the background thread is disabled. | 115 | * ubi_dbg_is_bgt_disabled - if the background thread is disabled. |
116 | * @ubi: UBI device description object | ||
111 | * | 117 | * |
112 | * Returns non-zero if the UBI background thread is disabled for testing | 118 | * Returns non-zero if the UBI background thread is disabled for testing |
113 | * purposes. | 119 | * purposes. |
114 | */ | 120 | */ |
115 | static inline int ubi_dbg_is_bgt_disabled(void) | 121 | static inline int ubi_dbg_is_bgt_disabled(const struct ubi_device *ubi) |
116 | { | 122 | { |
117 | return ubi_tst_flags & UBI_TST_DISABLE_BGT; | 123 | return ubi->dbg->disable_bgt; |
118 | } | 124 | } |
119 | 125 | ||
120 | /** | 126 | /** |
121 | * ubi_dbg_is_bitflip - if it is time to emulate a bit-flip. | 127 | * ubi_dbg_is_bitflip - if it is time to emulate a bit-flip. |
128 | * @ubi: UBI device description object | ||
122 | * | 129 | * |
123 | * Returns non-zero if a bit-flip should be emulated, otherwise returns zero. | 130 | * Returns non-zero if a bit-flip should be emulated, otherwise returns zero. |
124 | */ | 131 | */ |
125 | static inline int ubi_dbg_is_bitflip(void) | 132 | static inline int ubi_dbg_is_bitflip(const struct ubi_device *ubi) |
126 | { | 133 | { |
127 | if (ubi_tst_flags & UBI_TST_EMULATE_BITFLIPS) | 134 | if (ubi->dbg->emulate_bitflips) |
128 | return !(random32() % 200); | 135 | return !(random32() % 200); |
129 | return 0; | 136 | return 0; |
130 | } | 137 | } |
131 | 138 | ||
132 | /** | 139 | /** |
133 | * ubi_dbg_is_write_failure - if it is time to emulate a write failure. | 140 | * ubi_dbg_is_write_failure - if it is time to emulate a write failure. |
141 | * @ubi: UBI device description object | ||
134 | * | 142 | * |
135 | * Returns non-zero if a write failure should be emulated, otherwise returns | 143 | * Returns non-zero if a write failure should be emulated, otherwise returns |
136 | * zero. | 144 | * zero. |
137 | */ | 145 | */ |
138 | static inline int ubi_dbg_is_write_failure(void) | 146 | static inline int ubi_dbg_is_write_failure(const struct ubi_device *ubi) |
139 | { | 147 | { |
140 | if (ubi_tst_flags & UBI_TST_EMULATE_WRITE_FAILURES) | 148 | if (ubi->dbg->emulate_io_failures) |
141 | return !(random32() % 500); | 149 | return !(random32() % 500); |
142 | return 0; | 150 | return 0; |
143 | } | 151 | } |
144 | 152 | ||
145 | /** | 153 | /** |
146 | * ubi_dbg_is_erase_failure - if its time to emulate an erase failure. | 154 | * ubi_dbg_is_erase_failure - if its time to emulate an erase failure. |
155 | * @ubi: UBI device description object | ||
147 | * | 156 | * |
148 | * Returns non-zero if an erase failure should be emulated, otherwise returns | 157 | * Returns non-zero if an erase failure should be emulated, otherwise returns |
149 | * zero. | 158 | * zero. |
150 | */ | 159 | */ |
151 | static inline int ubi_dbg_is_erase_failure(void) | 160 | static inline int ubi_dbg_is_erase_failure(const struct ubi_device *ubi) |
152 | { | 161 | { |
153 | if (ubi_tst_flags & UBI_TST_EMULATE_ERASE_FAILURES) | 162 | if (ubi->dbg->emulate_io_failures) |
154 | return !(random32() % 400); | 163 | return !(random32() % 400); |
155 | return 0; | 164 | return 0; |
156 | } | 165 | } |
@@ -201,11 +210,6 @@ static inline void ubi_dbg_dump_flash(struct ubi_device *ubi, | |||
201 | static inline void | 210 | static inline void |
202 | ubi_dbg_print_hex_dump(const char *l, const char *ps, int pt, int r, | 211 | ubi_dbg_print_hex_dump(const char *l, const char *ps, int pt, int r, |
203 | int g, const void *b, size_t len, bool a) { return; } | 212 | int g, const void *b, size_t len, bool a) { return; } |
204 | |||
205 | static inline int ubi_dbg_is_bgt_disabled(void) { return 0; } | ||
206 | static inline int ubi_dbg_is_bitflip(void) { return 0; } | ||
207 | static inline int ubi_dbg_is_write_failure(void) { return 0; } | ||
208 | static inline int ubi_dbg_is_erase_failure(void) { return 0; } | ||
209 | static inline int ubi_dbg_check_all_ff(struct ubi_device *ubi, | 213 | static inline int ubi_dbg_check_all_ff(struct ubi_device *ubi, |
210 | int pnum, int offset, | 214 | int pnum, int offset, |
211 | int len) { return 0; } | 215 | int len) { return 0; } |
@@ -213,5 +217,20 @@ static inline int ubi_dbg_check_write(struct ubi_device *ubi, | |||
213 | const void *buf, int pnum, | 217 | const void *buf, int pnum, |
214 | int offset, int len) { return 0; } | 218 | int offset, int len) { return 0; } |
215 | 219 | ||
220 | static inline int ubi_debugging_init_dev(struct ubi_device *ubi) { return 0; } | ||
221 | static inline void ubi_debugging_exit_dev(struct ubi_device *ubi) { return; } | ||
222 | static inline int ubi_debugfs_init(void) { return 0; } | ||
223 | static inline void ubi_debugfs_exit(void) { return; } | ||
224 | static inline int ubi_debugfs_init_dev(struct ubi_device *ubi) { return 0; } | ||
225 | static inline void ubi_debugfs_exit_dev(struct ubi_device *ubi) { return; } | ||
226 | |||
227 | static inline int | ||
228 | ubi_dbg_is_bgt_disabled(const struct ubi_device *ubi) { return 0; } | ||
229 | static inline int ubi_dbg_is_bitflip(const struct ubi_device *ubi) { return 0; } | ||
230 | static inline int | ||
231 | ubi_dbg_is_write_failure(const struct ubi_device *ubi) { return 0; } | ||
232 | static inline int | ||
233 | ubi_dbg_is_erase_failure(const struct ubi_device *ubi) { return 0; } | ||
234 | |||
216 | #endif /* !CONFIG_MTD_UBI_DEBUG */ | 235 | #endif /* !CONFIG_MTD_UBI_DEBUG */ |
217 | #endif /* !__UBI_DEBUG_H__ */ | 236 | #endif /* !__UBI_DEBUG_H__ */ |