Commit 27a0f2a3 authored by Artem Bityutskiy's avatar Artem Bityutskiy

UBI: prepare debugging stuff to further debugfs conversion

We'll need the 'struct ubi_device *ubi' pointer in every debugging function (to
access the ->dbg field), so add this pointer to all the functions implementing
UBI debugging test modes like 'ubi_dbg_is_bitflip()' etc.
Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
parent 2a734bb8
...@@ -126,21 +126,23 @@ enum { ...@@ -126,21 +126,23 @@ enum {
/** /**
* ubi_dbg_is_bgt_disabled - if the background thread is disabled. * 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 * Returns non-zero if the UBI background thread is disabled for testing
* purposes. * 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_tst_flags & UBI_TST_DISABLE_BGT;
} }
/** /**
* 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.
* @ubi: UBI device description object
* *
* Returns non-zero if a bit-flip should be emulated, otherwise returns zero. * 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_tst_flags & UBI_TST_EMULATE_BITFLIPS)
return !(random32() % 200); return !(random32() % 200);
...@@ -149,11 +151,12 @@ static inline int ubi_dbg_is_bitflip(void) ...@@ -149,11 +151,12 @@ static inline int ubi_dbg_is_bitflip(void)
/** /**
* 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.
* @ubi: UBI device description object
* *
* Returns non-zero if a write failure should be emulated, otherwise returns * Returns non-zero if a write failure should be emulated, otherwise returns
* zero. * 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_tst_flags & UBI_TST_EMULATE_WRITE_FAILURES)
return !(random32() % 500); return !(random32() % 500);
...@@ -162,11 +165,12 @@ static inline int ubi_dbg_is_write_failure(void) ...@@ -162,11 +165,12 @@ static inline int ubi_dbg_is_write_failure(void)
/** /**
* 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.
* @ubi: UBI device description object
* *
* Returns non-zero if an erase failure should be emulated, otherwise returns * Returns non-zero if an erase failure should be emulated, otherwise returns
* zero. * 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_tst_flags & UBI_TST_EMULATE_ERASE_FAILURES)
return !(random32() % 400); return !(random32() % 400);
...@@ -233,10 +237,13 @@ static inline void ubi_debugfs_exit(void) { return; } ...@@ -233,10 +237,13 @@ static inline void ubi_debugfs_exit(void) { return; }
static inline int ubi_debugfs_init_dev(struct ubi_device *ubi) { return 0; } 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 void ubi_debugfs_exit_dev(struct ubi_device *ubi) { return; }
static inline int ubi_dbg_is_bgt_disabled(void) { return 0; } static inline int
static inline int ubi_dbg_is_bitflip(void) { return 0; } ubi_dbg_is_bgt_disabled(const struct ubi_device *ubi) { return 0; }
static inline int ubi_dbg_is_write_failure(void) { return 0; } static inline int ubi_dbg_is_bitflip(const struct ubi_device *ubi) { return 0; }
static inline int ubi_dbg_is_erase_failure(void) { 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 /* !CONFIG_MTD_UBI_DEBUG */
#endif /* !__UBI_DEBUG_H__ */ #endif /* !__UBI_DEBUG_H__ */
...@@ -212,7 +212,7 @@ int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset, ...@@ -212,7 +212,7 @@ int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset,
} else { } else {
ubi_assert(len == read); ubi_assert(len == read);
if (ubi_dbg_is_bitflip()) { if (ubi_dbg_is_bitflip(ubi)) {
dbg_gen("bit-flip (emulated)"); dbg_gen("bit-flip (emulated)");
err = UBI_IO_BITFLIPS; err = UBI_IO_BITFLIPS;
} }
...@@ -281,7 +281,7 @@ int ubi_io_write(struct ubi_device *ubi, const void *buf, int pnum, int offset, ...@@ -281,7 +281,7 @@ int ubi_io_write(struct ubi_device *ubi, const void *buf, int pnum, int offset,
return err; return err;
} }
if (ubi_dbg_is_write_failure()) { if (ubi_dbg_is_write_failure(ubi)) {
dbg_err("cannot write %d bytes to PEB %d:%d " dbg_err("cannot write %d bytes to PEB %d:%d "
"(emulated)", len, pnum, offset); "(emulated)", len, pnum, offset);
ubi_dbg_dump_stack(); ubi_dbg_dump_stack();
...@@ -396,7 +396,7 @@ static int do_sync_erase(struct ubi_device *ubi, int pnum) ...@@ -396,7 +396,7 @@ static int do_sync_erase(struct ubi_device *ubi, int pnum)
if (err) if (err)
return err; return err;
if (ubi_dbg_is_erase_failure()) { if (ubi_dbg_is_erase_failure(ubi)) {
dbg_err("cannot erase PEB %d (emulated)", pnum); dbg_err("cannot erase PEB %d (emulated)", pnum);
return -EIO; return -EIO;
} }
......
...@@ -616,7 +616,7 @@ static void schedule_ubi_work(struct ubi_device *ubi, struct ubi_work *wrk) ...@@ -616,7 +616,7 @@ static void schedule_ubi_work(struct ubi_device *ubi, struct ubi_work *wrk)
list_add_tail(&wrk->list, &ubi->works); list_add_tail(&wrk->list, &ubi->works);
ubi_assert(ubi->works_count >= 0); ubi_assert(ubi->works_count >= 0);
ubi->works_count += 1; ubi->works_count += 1;
if (ubi->thread_enabled && !ubi_dbg_is_bgt_disabled()) if (ubi->thread_enabled && !ubi_dbg_is_bgt_disabled(ubi))
wake_up_process(ubi->bgt_thread); wake_up_process(ubi->bgt_thread);
spin_unlock(&ubi->wl_lock); spin_unlock(&ubi->wl_lock);
} }
...@@ -1367,7 +1367,7 @@ int ubi_thread(void *u) ...@@ -1367,7 +1367,7 @@ int ubi_thread(void *u)
spin_lock(&ubi->wl_lock); spin_lock(&ubi->wl_lock);
if (list_empty(&ubi->works) || ubi->ro_mode || if (list_empty(&ubi->works) || ubi->ro_mode ||
!ubi->thread_enabled || ubi_dbg_is_bgt_disabled()) { !ubi->thread_enabled || ubi_dbg_is_bgt_disabled(ubi)) {
set_current_state(TASK_INTERRUPTIBLE); set_current_state(TASK_INTERRUPTIBLE);
spin_unlock(&ubi->wl_lock); spin_unlock(&ubi->wl_lock);
schedule(); schedule();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment