1a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe#ifndef FIO_DEBUG_H
2a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe#define FIO_DEBUG_H
3a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe
4a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe#include <assert.h>
5a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe#include "log.h"
6a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe
7a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboeenum {
8a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe	FD_PROCESS	= 0,
9a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe	FD_FILE,
10a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe	FD_IO,
11a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe	FD_MEM,
12a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe	FD_BLKTRACE,
13a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe	FD_VERIFY,
14a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe	FD_RANDOM,
15a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe	FD_PARSE,
16cd991b9e36b18903f1564a4bfafdc83a9f165219Jens Axboe	FD_DISKUTIL,
175e1d306e4f9a6337d07cc2d536d77c53e083226fJens Axboe	FD_JOB,
1829adda3ce304f16036cafee6c099aa08444a7db1Jens Axboe	FD_MUTEX,
1979d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe	FD_PROFILE,
20c223da83e253b0057bb029bf4fbb55a05844215cJens Axboe	FD_TIME,
21eb7976ef27c1d9f69885b0c8db3020303999c9afJens Axboe	FD_NET,
223e260a46ea9a8de224c3d0a29a608da3440f284aJens Axboe	FD_RATE,
234f3fe6cdbba0fcba681506f930c6f07dc01fe942Jens Axboe	FD_COMPRESS,
24a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe	FD_DEBUG_MAX,
25a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe};
26a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe
2769b98d4c9945bed6b3446a9e73bfaf8e557cf033Jens Axboeextern unsigned int fio_debug_jobno, *fio_debug_jobp;
2869b98d4c9945bed6b3446a9e73bfaf8e557cf033Jens Axboe
29a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe#ifdef FIO_INC_DEBUG
30a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboestruct debug_level {
31a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe	const char *name;
320b8d11ed135ac467c071c2ae0fe4f3a69a3b8febJens Axboe	const char *help;
33a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe	unsigned long shift;
345e1d306e4f9a6337d07cc2d536d77c53e083226fJens Axboe	unsigned int jobno;
35a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe};
36a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboeextern struct debug_level debug_levels[];
37a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe
38a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboeextern unsigned long fio_debug;
39a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe
40985ee30c1c9b61c834b38e2fbd13d0a19797602eJens Axboevoid __dprint(int type, const char *str, ...) __attribute__((format (printf, 2, 3)));
41bf84eacbfc91a952eb5b781ad2955109c862d41eJens Axboe
42bf84eacbfc91a952eb5b781ad2955109c862d41eJens Axboe#define dprint(type, str, args...)			\
43bf84eacbfc91a952eb5b781ad2955109c862d41eJens Axboe	do {						\
44bf84eacbfc91a952eb5b781ad2955109c862d41eJens Axboe		if ((((1 << type)) & fio_debug) == 0)	\
45bf84eacbfc91a952eb5b781ad2955109c862d41eJens Axboe			break;				\
46bf84eacbfc91a952eb5b781ad2955109c862d41eJens Axboe		__dprint((type), (str), ##args);	\
47bf84eacbfc91a952eb5b781ad2955109c862d41eJens Axboe	} while (0)					\
48a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe
49a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe#else
50a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe
51bf84eacbfc91a952eb5b781ad2955109c862d41eJens Axboestatic inline void dprint(int type, const char *str, ...)
52bf84eacbfc91a952eb5b781ad2955109c862d41eJens Axboe{
53bf84eacbfc91a952eb5b781ad2955109c862d41eJens Axboe}
54a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe#endif
55a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe
56a3d741fa3bc3120d5b62a56826a97524daa32803Jens Axboe#endif
57