47 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef _TOOLS_ASM_BUG_H3#define _TOOLS_ASM_BUG_H4 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