GNU Linux-libre 5.19-rc6-gnu
[releases.git] / tools / include / asm / bug.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _TOOLS_ASM_BUG_H
3 #define _TOOLS_ASM_BUG_H
4
5 #include <linux/compiler.h>
6 #include <stdio.h>
7
8 #define __WARN_printf(arg...)   do { fprintf(stderr, arg); } while (0)
9
10 #define WARN(condition, format...) ({           \
11         int __ret_warn_on = !!(condition);      \
12         if (unlikely(__ret_warn_on))            \
13                 __WARN_printf(format);          \
14         unlikely(__ret_warn_on);                \
15 })
16
17 #define WARN_ON(condition) ({                                   \
18         int __ret_warn_on = !!(condition);                      \
19         if (unlikely(__ret_warn_on))                            \
20                 __WARN_printf("assertion failed at %s:%d\n",    \
21                                 __FILE__, __LINE__);            \
22         unlikely(__ret_warn_on);                                \
23 })
24
25 #define WARN_ON_ONCE(condition) ({                      \
26         static int __warned;                            \
27         int __ret_warn_once = !!(condition);            \
28                                                         \
29         if (unlikely(__ret_warn_once && !__warned)) {   \
30                 __warned = true;                        \
31                 WARN_ON(1);                             \
32         }                                               \
33         unlikely(__ret_warn_once);                      \
34 })
35
36 #define WARN_ONCE(condition, format...) ({      \
37         static int __warned;                    \
38         int __ret_warn_once = !!(condition);    \
39                                                 \
40         if (unlikely(__ret_warn_once))          \
41                 if (WARN(!__warned, format))    \
42                         __warned = 1;           \
43         unlikely(__ret_warn_once);              \
44 })
45
46 #endif /* _TOOLS_ASM_BUG_H */