File Index
Files and directories
Sign in
FILE

utils.h

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/ublk/utils.h C
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef KUBLK_UTILS_H
 3#define KUBLK_UTILS_H
 4
 5#ifndef min
 6#define min(a, b) ((a) < (b) ? (a) : (b))
 7#endif
 8
 9#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
10
11#ifndef offsetof
12#define offsetof(TYPE, MEMBER)  ((size_t)&((TYPE *)0)->MEMBER)
13#endif
14
15#ifndef container_of
16#define container_of(ptr, type, member) ({                              \
17	unsigned long __mptr = (unsigned long)(ptr);                    \
18	((type *)(__mptr - offsetof(type, member))); })
19#endif
20
21#define round_up(val, rnd) \
22	(((val) + ((rnd) - 1)) & ~((rnd) - 1))
23
24static inline unsigned int ilog2(unsigned int x)
25{
26	if (x == 0)
27		return 0;
28	return (sizeof(x) * 8 - 1) - __builtin_clz(x);
29}
30
31#define UBLK_DBG_DEV            (1U << 0)
32#define UBLK_DBG_THREAD         (1U << 1)
33#define UBLK_DBG_IO_CMD         (1U << 2)
34#define UBLK_DBG_IO             (1U << 3)
35#define UBLK_DBG_CTRL_CMD       (1U << 4)
36#define UBLK_LOG                (1U << 5)
37
38extern unsigned int ublk_dbg_mask;
39
40static inline void ublk_err(const char *fmt, ...)
41{
42	va_list ap;
43
44	va_start(ap, fmt);
45	vfprintf(stderr, fmt, ap);
46}
47
48static inline void ublk_log(const char *fmt, ...)
49{
50	if (ublk_dbg_mask & UBLK_LOG) {
51		va_list ap;
52
53		va_start(ap, fmt);
54		vfprintf(stdout, fmt, ap);
55	}
56}
57
58static inline void ublk_dbg(int level, const char *fmt, ...)
59{
60	if (level & ublk_dbg_mask) {
61		va_list ap;
62
63		va_start(ap, fmt);
64		vfprintf(stdout, fmt, ap);
65	}
66}
67
68#endif
~/ Read-only file preview.