root/tools/include/asm/bug.h
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _TOOLS_ASM_BUG_H
#define _TOOLS_ASM_BUG_H

#include <linux/compiler.h>
#include <stdio.h>

#define __WARN_printf(arg...)   do { fprintf(stderr, arg); } while (0)

#define WARN(condition, format...) ({           \
        int __ret_warn_on = !!(condition);      \
        if (unlikely(__ret_warn_on))            \
                __WARN_printf(format);          \
        unlikely(__ret_warn_on);                \
})

#define WARN_ON(condition) ({                                   \
        int __ret_warn_on = !!(condition);                      \
        if (unlikely(__ret_warn_on))                            \
                __WARN_printf("assertion failed at %s:%d\n",    \
                                __FILE__, __LINE__);            \
        unlikely(__ret_warn_on);                                \
})

#define WARN_ON_ONCE(condition) ({                      \
        static int __warned;                            \
        int __ret_warn_once = !!(condition);            \
                                                        \
        if (unlikely(__ret_warn_once && !__warned)) {   \
                __warned = true;                        \
                WARN_ON(1);                             \
        }                                               \
        unlikely(__ret_warn_once);                      \
})

#define WARN_ONCE(condition, format...) ({      \
        static int __warned;                    \
        int __ret_warn_once = !!(condition);    \
                                                \
        if (unlikely(__ret_warn_once))          \
                if (WARN(!__warned, format))    \
                        __warned = 1;           \
        unlikely(__ret_warn_once);              \
})

#endif /* _TOOLS_ASM_BUG_H */