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 */ 47