diff options
Diffstat (limited to 'include/asm-generic/bug.h')
-rw-r--r-- | include/asm-generic/bug.h | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index 82b78261fc..18a1b419ff 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h @@ -1,7 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + #ifndef _ASM_GENERIC_BUG_H #define _ASM_GENERIC_BUG_H #include <linux/compiler.h> +#include <linux/kernel.h> +#include <printk.h> #define BUG() do { \ printf("BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __FUNCTION__); \ @@ -28,8 +32,7 @@ int __ret_warn_on = !!(condition); \ if (unlikely(__ret_warn_on)) { \ __WARN(); \ - puts("WARNING: "); \ - printf(format); \ + printf("WARNING: " format); \ } \ unlikely(__ret_warn_on); \ }) @@ -47,4 +50,21 @@ } \ unlikely(__ret_warn_once); \ }) + +#define WARN_ON_ONCE(condition) ({ \ + static int __warned; \ + int __ret_warn_once = !!(condition); \ + \ + if (unlikely(__ret_warn_once && !__warned)) { \ + __warned = 1; \ + __WARN(); \ + } \ + unlikely(__ret_warn_once); \ +}) + +#define ASSERT(expr) do { \ + if (IS_ENABLED(CONFIG_BUG_ON_DATA_CORRUPTION)) \ + BUG_ON(!(expr)); \ +} while (0) + #endif |