xref: /openbsd-src/sys/dev/pci/drm/include/linux/bug.h (revision ad8b1aafbcc34f7eb86e4ebfd874be286017954b)
1*ad8b1aafSjsg /*	$OpenBSD: bug.h,v 1.2 2021/07/07 02:38:36 jsg Exp $	*/
27f4dd379Sjsg /*
37f4dd379Sjsg  * Copyright (c) 2013, 2014, 2015 Mark Kettenis
47f4dd379Sjsg  *
57f4dd379Sjsg  * Permission to use, copy, modify, and distribute this software for any
67f4dd379Sjsg  * purpose with or without fee is hereby granted, provided that the above
77f4dd379Sjsg  * copyright notice and this permission notice appear in all copies.
87f4dd379Sjsg  *
97f4dd379Sjsg  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
107f4dd379Sjsg  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
117f4dd379Sjsg  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
127f4dd379Sjsg  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
137f4dd379Sjsg  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
147f4dd379Sjsg  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
157f4dd379Sjsg  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
167f4dd379Sjsg  */
177f4dd379Sjsg 
187f4dd379Sjsg #ifndef _LINUX_BUG_H
197f4dd379Sjsg #define _LINUX_BUG_H
207f4dd379Sjsg 
217f4dd379Sjsg #include <sys/types.h>
227f4dd379Sjsg #include <sys/systm.h>
237f4dd379Sjsg #include <linux/compiler.h>
24*ad8b1aafSjsg #include <linux/build_bug.h>
257f4dd379Sjsg 
267f4dd379Sjsg #define BUG()								\
277f4dd379Sjsg do {									\
287f4dd379Sjsg 	panic("BUG at %s:%d", __FILE__, __LINE__);			\
297f4dd379Sjsg } while (0)
307f4dd379Sjsg 
317f4dd379Sjsg #ifndef DIAGNOSTIC
327f4dd379Sjsg #define BUG_ON(x)	((void)(x))
337f4dd379Sjsg #else
347f4dd379Sjsg #define BUG_ON(x)	KASSERT(!(x))
357f4dd379Sjsg #endif
367f4dd379Sjsg 
377f4dd379Sjsg #define WARN(condition, fmt...) ({ 					\
387f4dd379Sjsg 	int __ret = !!(condition);					\
397f4dd379Sjsg 	if (__ret)							\
407f4dd379Sjsg 		printf(fmt);						\
417f4dd379Sjsg 	unlikely(__ret);						\
427f4dd379Sjsg })
437f4dd379Sjsg 
447f4dd379Sjsg #define WARN_ONCE(condition, fmt...) ({					\
457f4dd379Sjsg 	static int __warned;						\
467f4dd379Sjsg 	int __ret = !!(condition);					\
477f4dd379Sjsg 	if (__ret && !__warned) {					\
487f4dd379Sjsg 		printf(fmt);						\
497f4dd379Sjsg 		__warned = 1;						\
507f4dd379Sjsg 	}								\
517f4dd379Sjsg 	unlikely(__ret);						\
527f4dd379Sjsg })
537f4dd379Sjsg 
547f4dd379Sjsg #define _WARN_STR(x) #x
557f4dd379Sjsg 
567f4dd379Sjsg #define WARN_ON(condition) ({						\
577f4dd379Sjsg 	int __ret = !!(condition);					\
587f4dd379Sjsg 	if (__ret)							\
597f4dd379Sjsg 		printf("WARNING %s failed at %s:%d\n",			\
607f4dd379Sjsg 		    _WARN_STR(condition), __FILE__, __LINE__);		\
617f4dd379Sjsg 	unlikely(__ret);						\
627f4dd379Sjsg })
637f4dd379Sjsg 
647f4dd379Sjsg #define WARN_ON_ONCE(condition) ({					\
657f4dd379Sjsg 	static int __warned;						\
667f4dd379Sjsg 	int __ret = !!(condition);					\
677f4dd379Sjsg 	if (__ret && !__warned) {					\
687f4dd379Sjsg 		printf("WARNING %s failed at %s:%d\n",			\
697f4dd379Sjsg 		    _WARN_STR(condition), __FILE__, __LINE__);		\
707f4dd379Sjsg 		__warned = 1;						\
717f4dd379Sjsg 	}								\
727f4dd379Sjsg 	unlikely(__ret);						\
737f4dd379Sjsg })
747f4dd379Sjsg 
757f4dd379Sjsg #endif
76