Merge tag 'kvm-s390-next-5.6-1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / arch / s390 / include / asm / bug.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_S390_BUG_H
3 #define _ASM_S390_BUG_H
4
5 #include <linux/kernel.h>
6
7 #ifdef CONFIG_BUG
8
9 #ifdef CONFIG_DEBUG_BUGVERBOSE
10
11 #define __EMIT_BUG(x) do {                                      \
12         asm_inline volatile(                                    \
13                 "0:     mc      0,0\n"                          \
14                 ".section .rodata.str,\"aMS\",@progbits,1\n"    \
15                 "1:     .asciz  \""__FILE__"\"\n"               \
16                 ".previous\n"                                   \
17                 ".section __bug_table,\"awM\",@progbits,%2\n"   \
18                 "2:     .long   0b-2b,1b-2b\n"                  \
19                 "       .short  %0,%1\n"                        \
20                 "       .org    2b+%2\n"                        \
21                 ".previous\n"                                   \
22                 : : "i" (__LINE__),                             \
23                     "i" (x),                                    \
24                     "i" (sizeof(struct bug_entry)));            \
25 } while (0)
26
27 #else /* CONFIG_DEBUG_BUGVERBOSE */
28
29 #define __EMIT_BUG(x) do {                                      \
30         asm_inline volatile(                                    \
31                 "0:     mc      0,0\n"                          \
32                 ".section __bug_table,\"awM\",@progbits,%1\n"   \
33                 "1:     .long   0b-1b\n"                        \
34                 "       .short  %0\n"                           \
35                 "       .org    1b+%1\n"                        \
36                 ".previous\n"                                   \
37                 : : "i" (x),                                    \
38                     "i" (sizeof(struct bug_entry)));            \
39 } while (0)
40
41 #endif /* CONFIG_DEBUG_BUGVERBOSE */
42
43 #define BUG() do {                                      \
44         __EMIT_BUG(0);                                  \
45         unreachable();                                  \
46 } while (0)
47
48 #define __WARN_FLAGS(flags) do {                        \
49         __EMIT_BUG(BUGFLAG_WARNING|(flags));            \
50 } while (0)
51
52 #define WARN_ON(x) ({                                   \
53         int __ret_warn_on = !!(x);                      \
54         if (__builtin_constant_p(__ret_warn_on)) {      \
55                 if (__ret_warn_on)                      \
56                         __WARN();                       \
57         } else {                                        \
58                 if (unlikely(__ret_warn_on))            \
59                         __WARN();                       \
60         }                                               \
61         unlikely(__ret_warn_on);                        \
62 })
63
64 #define HAVE_ARCH_BUG
65 #define HAVE_ARCH_WARN_ON
66 #endif /* CONFIG_BUG */
67
68 #include <asm-generic/bug.h>
69
70 #endif /* _ASM_S390_BUG_H */