48
29
struct ubi_scan_leb;
49
30
struct ubi_mkvol_req;
32
#ifdef CONFIG_MTD_UBI_DEBUG
33
#include <linux/random.h>
35
#define ubi_assert(expr) do { \
36
if (unlikely(!(expr))) { \
37
printk(KERN_CRIT "UBI assert failed in %s at %u (pid %d)\n", \
38
__func__, __LINE__, current->pid); \
39
ubi_dbg_dump_stack(); \
43
#define dbg_err(fmt, ...) ubi_err(fmt, ##__VA_ARGS__)
45
#define ubi_dbg_dump_stack() dump_stack()
47
#define ubi_dbg_print_hex_dump(l, ps, pt, r, g, b, len, a) \
48
print_hex_dump(l, ps, pt, r, g, b, len, a)
50
#define ubi_dbg_msg(type, fmt, ...) \
51
pr_debug("UBI DBG " type ": " fmt "\n", ##__VA_ARGS__)
53
/* Just a debugging messages not related to any specific UBI subsystem */
54
#define dbg_msg(fmt, ...) ubi_dbg_msg("msg", fmt, ##__VA_ARGS__)
55
/* General debugging messages */
56
#define dbg_gen(fmt, ...) ubi_dbg_msg("gen", fmt, ##__VA_ARGS__)
57
/* Messages from the eraseblock association sub-system */
58
#define dbg_eba(fmt, ...) ubi_dbg_msg("eba", fmt, ##__VA_ARGS__)
59
/* Messages from the wear-leveling sub-system */
60
#define dbg_wl(fmt, ...) ubi_dbg_msg("wl", fmt, ##__VA_ARGS__)
61
/* Messages from the input/output sub-system */
62
#define dbg_io(fmt, ...) ubi_dbg_msg("io", fmt, ##__VA_ARGS__)
63
/* Initialization and build messages */
64
#define dbg_bld(fmt, ...) ubi_dbg_msg("bld", fmt, ##__VA_ARGS__)
51
66
void ubi_dbg_dump_ec_hdr(const struct ubi_ec_hdr *ec_hdr);
52
67
void ubi_dbg_dump_vid_hdr(const struct ubi_vid_hdr *vid_hdr);
53
68
void ubi_dbg_dump_vol_info(const struct ubi_volume *vol);
57
72
void ubi_dbg_dump_mkvol_req(const struct ubi_mkvol_req *req);
58
73
void ubi_dbg_dump_flash(struct ubi_device *ubi, int pnum, int offset, int len);
60
#define ubi_dbg_print_hex_dump(l, ps, pt, r, g, b, len, a) \
61
print_hex_dump(l, ps, pt, r, g, b, len, a)
63
#ifdef CONFIG_MTD_UBI_DEBUG_MSG
64
/* General debugging messages */
65
#define dbg_gen(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
67
#define dbg_gen(fmt, ...) ({})
70
#ifdef CONFIG_MTD_UBI_DEBUG_MSG_EBA
71
/* Messages from the eraseblock association sub-system */
72
#define dbg_eba(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
74
#define dbg_eba(fmt, ...) ({})
77
#ifdef CONFIG_MTD_UBI_DEBUG_MSG_WL
78
/* Messages from the wear-leveling sub-system */
79
#define dbg_wl(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
81
#define dbg_wl(fmt, ...) ({})
84
#ifdef CONFIG_MTD_UBI_DEBUG_MSG_IO
85
/* Messages from the input/output sub-system */
86
#define dbg_io(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
88
#define dbg_io(fmt, ...) ({})
91
#ifdef CONFIG_MTD_UBI_DEBUG_MSG_BLD
92
/* Initialization and build messages */
93
#define dbg_bld(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
94
#define UBI_IO_DEBUG 1
96
#define dbg_bld(fmt, ...) ({})
97
#define UBI_IO_DEBUG 0
100
#ifdef CONFIG_MTD_UBI_DEBUG_PARANOID
75
extern unsigned int ubi_chk_flags;
78
* Debugging check flags.
80
* UBI_CHK_GEN: general checks
81
* UBI_CHK_IO: check writes and erases
101
88
int ubi_dbg_check_all_ff(struct ubi_device *ubi, int pnum, int offset, int len);
102
89
int ubi_dbg_check_write(struct ubi_device *ubi, const void *buf, int pnum,
103
90
int offset, int len);
105
#define ubi_dbg_check_all_ff(ubi, pnum, offset, len) 0
106
#define ubi_dbg_check_write(ubi, buf, pnum, offset, len) 0
109
#ifdef CONFIG_MTD_UBI_DEBUG_DISABLE_BGT
110
#define DBG_DISABLE_BGT 1
112
#define DBG_DISABLE_BGT 0
115
#ifdef CONFIG_MTD_UBI_DEBUG_EMULATE_BITFLIPS
92
extern unsigned int ubi_tst_flags;
95
* Special testing flags.
97
* UBIFS_TST_DISABLE_BGT: disable the background thread
98
* UBI_TST_EMULATE_BITFLIPS: emulate bit-flips
99
* UBI_TST_EMULATE_WRITE_FAILURES: emulate write failures
100
* UBI_TST_EMULATE_ERASE_FAILURES: emulate erase failures
103
UBI_TST_DISABLE_BGT = 0x1,
104
UBI_TST_EMULATE_BITFLIPS = 0x2,
105
UBI_TST_EMULATE_WRITE_FAILURES = 0x4,
106
UBI_TST_EMULATE_ERASE_FAILURES = 0x8,
110
* ubi_dbg_is_bgt_disabled - if the background thread is disabled.
112
* Returns non-zero if the UBI background thread is disabled for testing
115
static inline int ubi_dbg_is_bgt_disabled(void)
117
return ubi_tst_flags & UBI_TST_DISABLE_BGT;
117
121
* ubi_dbg_is_bitflip - if it is time to emulate a bit-flip.
151
151
static inline int ubi_dbg_is_erase_failure(void)
153
if (ubi_tst_flags & UBI_TST_EMULATE_ERASE_FAILURES)
153
154
return !(random32() % 400);
156
#define ubi_dbg_is_erase_failure() 0
161
#define ubi_assert(expr) ({})
162
#define dbg_err(fmt, ...) ({})
163
#define dbg_msg(fmt, ...) ({})
164
#define dbg_gen(fmt, ...) ({})
165
#define dbg_eba(fmt, ...) ({})
166
#define dbg_wl(fmt, ...) ({})
167
#define dbg_io(fmt, ...) ({})
168
#define dbg_bld(fmt, ...) ({})
169
#define ubi_dbg_dump_stack() ({})
170
#define ubi_dbg_dump_ec_hdr(ec_hdr) ({})
171
#define ubi_dbg_dump_vid_hdr(vid_hdr) ({})
172
#define ubi_dbg_dump_vol_info(vol) ({})
173
#define ubi_dbg_dump_vtbl_record(r, idx) ({})
174
#define ubi_dbg_dump_sv(sv) ({})
175
#define ubi_dbg_dump_seb(seb, type) ({})
176
#define ubi_dbg_dump_mkvol_req(req) ({})
177
#define ubi_dbg_dump_flash(ubi, pnum, offset, len) ({})
178
#define ubi_dbg_print_hex_dump(l, ps, pt, r, g, b, len, a) ({})
180
#define UBI_IO_DEBUG 0
181
#define DBG_DISABLE_BGT 0
182
#define ubi_dbg_is_bitflip() 0
183
#define ubi_dbg_is_write_failure() 0
184
#define ubi_dbg_is_erase_failure() 0
185
#define ubi_dbg_check_all_ff(ubi, pnum, offset, len) 0
186
#define ubi_dbg_check_write(ubi, buf, pnum, offset, len) 0
160
/* Use "if (0)" to make compiler check arguments even if debugging is off */
161
#define ubi_assert(expr) do { \
163
printk(KERN_CRIT "UBI assert failed in %s at %u (pid %d)\n", \
164
__func__, __LINE__, current->pid); \
168
#define dbg_err(fmt, ...) do { \
170
ubi_err(fmt, ##__VA_ARGS__); \
173
#define ubi_dbg_msg(fmt, ...) do { \
175
pr_debug(fmt "\n", ##__VA_ARGS__); \
178
#define dbg_msg(fmt, ...) ubi_dbg_msg(fmt, ##__VA_ARGS__)
179
#define dbg_gen(fmt, ...) ubi_dbg_msg(fmt, ##__VA_ARGS__)
180
#define dbg_eba(fmt, ...) ubi_dbg_msg(fmt, ##__VA_ARGS__)
181
#define dbg_wl(fmt, ...) ubi_dbg_msg(fmt, ##__VA_ARGS__)
182
#define dbg_io(fmt, ...) ubi_dbg_msg(fmt, ##__VA_ARGS__)
183
#define dbg_bld(fmt, ...) ubi_dbg_msg(fmt, ##__VA_ARGS__)
185
static inline void ubi_dbg_dump_stack(void) { return; }
187
ubi_dbg_dump_ec_hdr(const struct ubi_ec_hdr *ec_hdr) { return; }
189
ubi_dbg_dump_vid_hdr(const struct ubi_vid_hdr *vid_hdr) { return; }
191
ubi_dbg_dump_vol_info(const struct ubi_volume *vol) { return; }
193
ubi_dbg_dump_vtbl_record(const struct ubi_vtbl_record *r, int idx) { return; }
194
static inline void ubi_dbg_dump_sv(const struct ubi_scan_volume *sv) { return; }
195
static inline void ubi_dbg_dump_seb(const struct ubi_scan_leb *seb,
196
int type) { return; }
198
ubi_dbg_dump_mkvol_req(const struct ubi_mkvol_req *req) { return; }
199
static inline void ubi_dbg_dump_flash(struct ubi_device *ubi,
200
int pnum, int offset, int len) { return; }
202
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; }
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,
210
int pnum, int offset,
211
int len) { return 0; }
212
static inline int ubi_dbg_check_write(struct ubi_device *ubi,
213
const void *buf, int pnum,
214
int offset, int len) { return 0; }
188
216
#endif /* !CONFIG_MTD_UBI_DEBUG */
189
217
#endif /* !__UBI_DEBUG_H__ */