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