Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
mtd
ubi
debug.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) International Business Machines Corp., 2006
3
*
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 2 of the License, or
7
* (at your option) any later version.
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
12
* the GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
*
18
* Author: Artem Bityutskiy (Битюцкий Артём)
19
*/
20
21
#ifndef __UBI_DEBUG_H__
22
#define __UBI_DEBUG_H__
23
24
void
ubi_dump_flash
(
struct
ubi_device
*ubi,
int
pnum,
int
offset
,
int
len);
25
void
ubi_dump_ec_hdr
(
const
struct
ubi_ec_hdr
*ec_hdr);
26
void
ubi_dump_vid_hdr
(
const
struct
ubi_vid_hdr
*vid_hdr);
27
28
#include <linux/random.h>
29
30
#define ubi_assert(expr) do { \
31
if (unlikely(!(expr))) { \
32
pr_crit("UBI assert failed in %s at %u (pid %d)\n", \
33
__func__, __LINE__, current->pid); \
34
dump_stack(); \
35
} \
36
} while (0)
37
38
#define ubi_dbg_print_hex_dump(l, ps, pt, r, g, b, len, a) \
39
print_hex_dump(l, ps, pt, r, g, b, len, a)
40
41
#define ubi_dbg_msg(type, fmt, ...) \
42
pr_debug("UBI DBG " type " (pid %d): " fmt "\n", current->pid, \
43
##__VA_ARGS__)
44
45
/* General debugging messages */
46
#define dbg_gen(fmt, ...) ubi_dbg_msg("gen", fmt, ##__VA_ARGS__)
47
/* Messages from the eraseblock association sub-system */
48
#define dbg_eba(fmt, ...) ubi_dbg_msg("eba", fmt, ##__VA_ARGS__)
49
/* Messages from the wear-leveling sub-system */
50
#define dbg_wl(fmt, ...) ubi_dbg_msg("wl", fmt, ##__VA_ARGS__)
51
/* Messages from the input/output sub-system */
52
#define dbg_io(fmt, ...) ubi_dbg_msg("io", fmt, ##__VA_ARGS__)
53
/* Initialization and build messages */
54
#define dbg_bld(fmt, ...) ubi_dbg_msg("bld", fmt, ##__VA_ARGS__)
55
56
void
ubi_dump_vol_info
(
const
struct
ubi_volume
*
vol
);
57
void
ubi_dump_vtbl_record
(
const
struct
ubi_vtbl_record
*
r
,
int
idx
);
58
void
ubi_dump_av
(
const
struct
ubi_ainf_volume
*
av
);
59
void
ubi_dump_aeb
(
const
struct
ubi_ainf_peb
*aeb,
int
type
);
60
void
ubi_dump_mkvol_req
(
const
struct
ubi_mkvol_req
*
req
);
61
int
ubi_self_check_all_ff
(
struct
ubi_device
*ubi,
int
pnum,
int
offset
,
62
int
len);
63
int
ubi_debugging_init_dev
(
struct
ubi_device
*ubi);
64
void
ubi_debugging_exit_dev
(
struct
ubi_device
*ubi);
65
int
ubi_debugfs_init
(
void
);
66
void
ubi_debugfs_exit
(
void
);
67
int
ubi_debugfs_init_dev
(
struct
ubi_device
*ubi);
68
void
ubi_debugfs_exit_dev
(
struct
ubi_device
*ubi);
69
70
/*
71
* The UBI debugfs directory name pattern and maximum name length (3 for "ubi"
72
* + 2 for the number plus 1 for the trailing zero byte.
73
*/
74
#define UBI_DFS_DIR_NAME "ubi%d"
75
#define UBI_DFS_DIR_LEN (3 + 2 + 1)
76
93
struct
ubi_debug_info
{
94
unsigned
int
chk_gen
:1;
95
unsigned
int
chk_io
:1;
96
unsigned
int
disable_bgt
:1;
97
unsigned
int
emulate_bitflips
:1;
98
unsigned
int
emulate_io_failures
:1;
99
char
dfs_dir_name
[
UBI_DFS_DIR_LEN
+ 1];
100
struct
dentry
*
dfs_dir
;
101
struct
dentry
*
dfs_chk_gen
;
102
struct
dentry
*
dfs_chk_io
;
103
struct
dentry
*
dfs_disable_bgt
;
104
struct
dentry
*
dfs_emulate_bitflips
;
105
struct
dentry
*
dfs_emulate_io_failures
;
106
};
107
115
static
inline
int
ubi_dbg_is_bgt_disabled(
const
struct
ubi_device
*ubi)
116
{
117
return
ubi->
dbg
->disable_bgt;
118
}
119
126
static
inline
int
ubi_dbg_is_bitflip(
const
struct
ubi_device
*ubi)
127
{
128
if
(ubi->
dbg
->emulate_bitflips)
129
return
!(
random32
() % 200);
130
return
0;
131
}
132
140
static
inline
int
ubi_dbg_is_write_failure(
const
struct
ubi_device
*ubi)
141
{
142
if
(ubi->
dbg
->emulate_io_failures)
143
return
!(
random32
() % 500);
144
return
0;
145
}
146
154
static
inline
int
ubi_dbg_is_erase_failure(
const
struct
ubi_device
*ubi)
155
{
156
if
(ubi->
dbg
->emulate_io_failures)
157
return
!(
random32
() % 400);
158
return
0;
159
}
160
161
#endif
/* !__UBI_DEBUG_H__ */
Generated on Thu Jan 10 2013 13:09:34 for Linux Kernel by
1.8.2