]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - arch/s390/include/asm/bug.h
Merge tag 'for-linus-20170812' of git://git.infradead.org/linux-mtd
[karo-tx-linux.git] / arch / s390 / include / asm / bug.h
1 #ifndef _ASM_S390_BUG_H
2 #define _ASM_S390_BUG_H
3
4 #include <linux/kernel.h>
5
6 #ifdef CONFIG_BUG
7
8 #ifdef CONFIG_DEBUG_BUGVERBOSE
9
10 #define __EMIT_BUG(x) do {                                      \
11         asm volatile(                                           \
12                 "0:     j       0b+2\n"                         \
13                 "1:\n"                                          \
14                 ".section .rodata.str,\"aMS\",@progbits,1\n"    \
15                 "2:     .asciz  \""__FILE__"\"\n"               \
16                 ".previous\n"                                   \
17                 ".section __bug_table,\"aw\"\n"                 \
18                 "3:     .long   1b-3b,2b-3b\n"                  \
19                 "       .short  %0,%1\n"                        \
20                 "       .org    3b+%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 volatile(                                   \
31                 "0:     j       0b+2\n"                 \
32                 "1:\n"                                  \
33                 ".section __bug_table,\"aw\"\n"         \
34                 "2:     .long   1b-2b\n"                \
35                 "       .short  %0\n"                   \
36                 "       .org    2b+%1\n"                \
37                 ".previous\n"                           \
38                 : : "i" (x),                            \
39                     "i" (sizeof(struct bug_entry)));    \
40 } while (0)
41
42 #endif /* CONFIG_DEBUG_BUGVERBOSE */
43
44 #define BUG() do {                                      \
45         __EMIT_BUG(0);                                  \
46         unreachable();                                  \
47 } while (0)
48
49 #define __WARN_FLAGS(flags) do {                        \
50         __EMIT_BUG(BUGFLAG_WARNING|(flags));            \
51 } while (0)
52
53 #define WARN_ON(x) ({                                   \
54         int __ret_warn_on = !!(x);                      \
55         if (__builtin_constant_p(__ret_warn_on)) {      \
56                 if (__ret_warn_on)                      \
57                         __WARN();                       \
58         } else {                                        \
59                 if (unlikely(__ret_warn_on))            \
60                         __WARN();                       \
61         }                                               \
62         unlikely(__ret_warn_on);                        \
63 })
64
65 #define HAVE_ARCH_BUG
66 #define HAVE_ARCH_WARN_ON
67 #endif /* CONFIG_BUG */
68
69 #include <asm-generic/bug.h>
70
71 #endif /* _ASM_S390_BUG_H */