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