lowercase bug() and warn() functions

This commit is contained in:
2024-02-07 19:03:50 +01:00
parent b637146095
commit e907c81b8b
3 changed files with 45 additions and 65 deletions

View File

@@ -1,68 +1,48 @@
/* SPDX-License-Identifier: GPL-2.0 */ /* bug.h - bug_on/warn_on/warn functions.
#ifndef _BR_BUG_H *
#define _BR_BUG_H * Copyright (C) 2021-2024 Bruno Raoult ("br")
* Licensed under the GNU General Public License v3.0 or later.
* Some rights reserved. See COPYING.
*
* You should have received a copy of the GNU General Public License along with this
* program. If not, see <https://www.gnu.org/licenses/gpl-3.0-standalone.html>.
*
* SPDX-License-Identifier: GPL-3.0-or-later <https://spdx.org/licenses/GPL-3.0-or-later.html>
*
*/
#ifndef _BUG_H
#define _BUG_H
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include "likely.h" #include "likely.h"
#include "debug.h"
/* BUG functions inspired by Linux kernel's <asm/bug.h> #define bug_on(expr) do { \
*/ if (unlikely(expr)) { \
fprintf(stderr, \
#define panic() exit(0xff) "** BUG IN %s[%s:%d]: assertion \"" #expr "\" failed.\n", \
__func__, __FILE__,__LINE__); \
/* abort(); \
* Don't use BUG() or BUG_ON() unless there's really no way out; one } \
* example might be detecting data structure corruption in the middle
* of an operation that can't be backed out of. If the (sub)system
* can somehow continue operating, perhaps with reduced functionality,
* it's probably not BUG-worthy.
*
*/
#define BUG() do { \
fprintf(stderr, "BUG: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
panic(); \
} while (0) } while (0)
#define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) #define warn_on(expr) ({ \
int _ret = !!(expr); \
/* if (unlikely(_ret)) \
* WARN(), WARN_ON(), WARN_ON_ONCE, and so on can be used to report significant fprintf(stderr, \
* issues that need prompt attention if they should ever appear at runtime. "** WARN ON %s[%s:%d]: assertion \"" #expr "\" failed.\n", \
* __func__, __FILE__,__LINE__); \
* Do not use these macros when checking for invalid external inputs unlikely(_ret); \
* (e.g. invalid system call arguments, or invalid data coming from
* network/devices), and on transient conditions like ENOMEM or EAGAIN.
* These macros should be used for recoverable kernel issues only.
* For invalid external inputs, transient conditions, etc use
* pr_err[_once/_ratelimited]() followed by dump_stack(), if necessary.
* Do not include "BUG"/"WARNING" in format strings manually to make these
* conditions distinguishable from kernel issues.
*
* Use the versions with printk format strings to provide better diagnostics.
*/
#define __WARN() do { \
fprintf(stderr, "WARNING: failure at %s:%d/%s()!\n", __FILE__, __LINE__, __func__); \
} while (0)
#define __WARN_printf(arg...) do { \
vfprintf(stderr, arg); \
} while (0)
#define WARN_ON(condition) ({ \
int __ret_warn_on = !!(condition); \
if (unlikely(__ret_warn_on)) \
__WARN(); \
unlikely(__ret_warn_on); \
}) })
#define WARN(condition, format...) ({ \ #define warn(expr, format...) ({ \
int __ret_warn_on = !!(condition); \ int _ret = !!(expr); \
if (unlikely(__ret_warn_on)) \ if (unlikely(_ret)) \
__WARN_printf(format); \ vfprintf(stderr, format); \
unlikely(__ret_warn_on); \ unlikely(_ret); \
}) })
#endif /* _BR_BUG_H */ #endif /* _BUG_H */

View File

@@ -279,7 +279,7 @@ static inline int plist_node_empty(const struct plist_node *node)
#ifdef CONFIG_DEBUG_PLIST #ifdef CONFIG_DEBUG_PLIST
# define plist_first_entry(head, type, member) \ # define plist_first_entry(head, type, member) \
({ \ ({ \
WARN_ON(plist_head_empty(head)); \ warn_on(plist_head_empty(head)); \
container_of(plist_first(head), type, member); \ container_of(plist_first(head), type, member); \
}) })
#else #else
@@ -296,7 +296,7 @@ static inline int plist_node_empty(const struct plist_node *node)
#ifdef CONFIG_DEBUG_PLIST #ifdef CONFIG_DEBUG_PLIST
# define plist_last_entry(head, type, member) \ # define plist_last_entry(head, type, member) \
({ \ ({ \
WARN_ON(plist_head_empty(head)); \ warn_on(plist_head_empty(head)); \
container_of(plist_last(head), type, member); \ container_of(plist_last(head), type, member); \
}) })
#else #else

View File

@@ -32,7 +32,7 @@ static struct plist_head test_head;
static void plist_check_prev_next(struct list_head *t, struct list_head *p, static void plist_check_prev_next(struct list_head *t, struct list_head *p,
struct list_head *n) struct list_head *n)
{ {
WARN(n->prev != p || p->next != n, warn(n->prev != p || p->next != n,
"top: %p, n: %p, p: %p\n" "top: %p, n: %p, p: %p\n"
"prev: %p, n: %p, p: %p\n" "prev: %p, n: %p, p: %p\n"
"next: %p, n: %p, p: %p\n", "next: %p, n: %p, p: %p\n",
@@ -76,8 +76,8 @@ void plist_add(struct plist_node *node, struct plist_head *head)
struct list_head *node_next = &head->node_list; struct list_head *node_next = &head->node_list;
plist_check_head(head); plist_check_head(head);
WARN_ON(!plist_node_empty(node)); warn_on(!plist_node_empty(node));
WARN_ON(!list_empty(&node->prio_list)); warn_on(!list_empty(&node->prio_list));
if (plist_head_empty(head)) if (plist_head_empty(head))
goto ins_node; goto ins_node;
@@ -148,8 +148,8 @@ void plist_requeue(struct plist_node *node, struct plist_head *head)
struct list_head *node_next = &head->node_list; struct list_head *node_next = &head->node_list;
plist_check_head(head); plist_check_head(head);
BUG_ON(plist_head_empty(head)); bug_on(plist_head_empty(head));
BUG_ON(plist_node_empty(node)); bug_on(plist_node_empty(node));
if (node == plist_last(head)) if (node == plist_last(head))
return; return;