1 #ifndef FIO_DEBUG_H
2 #define FIO_DEBUG_H
3 
4 #include "lib/types.h"
5 
6 enum {
7 	FD_PROCESS	= 0,
8 	FD_FILE,
9 	FD_IO,
10 	FD_MEM,
11 	FD_BLKTRACE,
12 	FD_VERIFY,
13 	FD_RANDOM,
14 	FD_PARSE,
15 	FD_DISKUTIL,
16 	FD_JOB,
17 	FD_MUTEX,
18 	FD_PROFILE,
19 	FD_TIME,
20 	FD_NET,
21 	FD_RATE,
22 	FD_COMPRESS,
23 	FD_STEADYSTATE,
24 	FD_HELPERTHREAD,
25 	FD_ZBD,
26 	FD_DEBUG_MAX,
27 };
28 
29 extern unsigned int fio_debug_jobno, *fio_debug_jobp, *fio_warned;
30 
fio_did_warn(unsigned int mask)31 static inline bool fio_did_warn(unsigned int mask)
32 {
33 	if (*fio_warned & mask)
34 		return true;
35 
36 	*fio_warned |= mask;
37 	return false;
38 }
39 
40 enum {
41 	FIO_WARN_ROOT_FLUSH	= 1,
42 	FIO_WARN_VERIFY_BUF	= 2,
43 	FIO_WARN_ZONED_BUG	= 4,
44 	FIO_WARN_IOLOG_DROP	= 8,
45 	FIO_WARN_FADVISE	= 16,
46 	FIO_WARN_BTRACE_ZERO	= 32,
47 };
48 
49 #ifdef FIO_INC_DEBUG
50 struct debug_level {
51 	const char *name;
52 	const char *help;
53 	unsigned long shift;
54 	unsigned int jobno;
55 };
56 extern const struct debug_level debug_levels[];
57 
58 extern unsigned long fio_debug;
59 
60 void __dprint(int type, const char *str, ...) __attribute__((format (printf, 2, 3)));
61 
62 #define dprint(type, str, args...)			\
63 	do {						\
64 		if (((1 << type) & fio_debug) == 0)	\
65 			break;				\
66 		__dprint((type), (str), ##args);	\
67 	} while (0)					\
68 
69 #else
70 
dprint(int type,const char * str,...)71 static inline void dprint(int type, const char *str, ...)
72 {
73 }
74 #endif
75 
76 #endif
77