102dfc8d7SNamhyung Kim #ifndef _TOOLS_ASM_BUG_H 202dfc8d7SNamhyung Kim #define _TOOLS_ASM_BUG_H 302dfc8d7SNamhyung Kim 4741a0c59SNamhyung Kim #include <linux/compiler.h> 5741a0c59SNamhyung Kim 602dfc8d7SNamhyung Kim #define __WARN_printf(arg...) do { fprintf(stderr, arg); } while (0) 702dfc8d7SNamhyung Kim 802dfc8d7SNamhyung Kim #define WARN(condition, format...) ({ \ 902dfc8d7SNamhyung Kim int __ret_warn_on = !!(condition); \ 1002dfc8d7SNamhyung Kim if (unlikely(__ret_warn_on)) \ 1102dfc8d7SNamhyung Kim __WARN_printf(format); \ 1202dfc8d7SNamhyung Kim unlikely(__ret_warn_on); \ 1302dfc8d7SNamhyung Kim }) 1402dfc8d7SNamhyung Kim 15b246a9d2SMatthew Wilcox #define WARN_ON(condition) ({ \ 16b246a9d2SMatthew Wilcox int __ret_warn_on = !!(condition); \ 17b246a9d2SMatthew Wilcox if (unlikely(__ret_warn_on)) \ 18b246a9d2SMatthew Wilcox __WARN_printf("assertion failed at %s:%d\n", \ 19b246a9d2SMatthew Wilcox __FILE__, __LINE__); \ 20b246a9d2SMatthew Wilcox unlikely(__ret_warn_on); \ 21b246a9d2SMatthew Wilcox }) 22b246a9d2SMatthew Wilcox 23ebb9a9aeSMatthew Wilcox #define WARN_ON_ONCE(condition) ({ \ 24ebb9a9aeSMatthew Wilcox static int __warned; \ 25ebb9a9aeSMatthew Wilcox int __ret_warn_once = !!(condition); \ 26ebb9a9aeSMatthew Wilcox \ 27ebb9a9aeSMatthew Wilcox if (unlikely(__ret_warn_once && !__warned)) { \ 28ebb9a9aeSMatthew Wilcox __warned = true; \ 29ebb9a9aeSMatthew Wilcox WARN_ON(1); \ 30ebb9a9aeSMatthew Wilcox } \ 31ebb9a9aeSMatthew Wilcox unlikely(__ret_warn_once); \ 32ebb9a9aeSMatthew Wilcox }) 33ebb9a9aeSMatthew Wilcox 3402dfc8d7SNamhyung Kim #define WARN_ONCE(condition, format...) ({ \ 3502dfc8d7SNamhyung Kim static int __warned; \ 3602dfc8d7SNamhyung Kim int __ret_warn_once = !!(condition); \ 3702dfc8d7SNamhyung Kim \ 3802dfc8d7SNamhyung Kim if (unlikely(__ret_warn_once)) \ 3902dfc8d7SNamhyung Kim if (WARN(!__warned, format)) \ 4002dfc8d7SNamhyung Kim __warned = 1; \ 4102dfc8d7SNamhyung Kim unlikely(__ret_warn_once); \ 4202dfc8d7SNamhyung Kim }) 4302dfc8d7SNamhyung Kim 4402dfc8d7SNamhyung Kim #endif /* _TOOLS_ASM_BUG_H */ 45