^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 _TOOLS_ASM_BUG_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define _TOOLS_ASM_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) #include <stdio.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #define __WARN_printf(arg...) do { fprintf(stderr, arg); } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #define WARN(condition, format...) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) int __ret_warn_on = !!(condition); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) if (unlikely(__ret_warn_on)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) __WARN_printf(format); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) unlikely(__ret_warn_on); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define WARN_ON(condition) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) int __ret_warn_on = !!(condition); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) if (unlikely(__ret_warn_on)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) __WARN_printf("assertion failed at %s:%d\n", \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) __FILE__, __LINE__); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) unlikely(__ret_warn_on); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define WARN_ON_ONCE(condition) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) static int __warned; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) int __ret_warn_once = !!(condition); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) if (unlikely(__ret_warn_once && !__warned)) { \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) __warned = true; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) WARN_ON(1); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) } \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) unlikely(__ret_warn_once); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define WARN_ONCE(condition, format...) ({ \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) static int __warned; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) int __ret_warn_once = !!(condition); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) if (unlikely(__ret_warn_once)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) if (WARN(!__warned, format)) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) __warned = 1; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) unlikely(__ret_warn_once); \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #endif /* _TOOLS_ASM_BUG_H */