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