Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef _LINUX_NET_DEBUG_H
0003 #define _LINUX_NET_DEBUG_H
0004 
0005 #include <linux/bug.h>
0006 #include <linux/kern_levels.h>
0007 
0008 struct net_device;
0009 
0010 __printf(3, 4) __cold
0011 void netdev_printk(const char *level, const struct net_device *dev,
0012            const char *format, ...);
0013 __printf(2, 3) __cold
0014 void netdev_emerg(const struct net_device *dev, const char *format, ...);
0015 __printf(2, 3) __cold
0016 void netdev_alert(const struct net_device *dev, const char *format, ...);
0017 __printf(2, 3) __cold
0018 void netdev_crit(const struct net_device *dev, const char *format, ...);
0019 __printf(2, 3) __cold
0020 void netdev_err(const struct net_device *dev, const char *format, ...);
0021 __printf(2, 3) __cold
0022 void netdev_warn(const struct net_device *dev, const char *format, ...);
0023 __printf(2, 3) __cold
0024 void netdev_notice(const struct net_device *dev, const char *format, ...);
0025 __printf(2, 3) __cold
0026 void netdev_info(const struct net_device *dev, const char *format, ...);
0027 
0028 #define netdev_level_once(level, dev, fmt, ...)         \
0029 do {                                \
0030     static bool __section(".data.once") __print_once;   \
0031                                 \
0032     if (!__print_once) {                    \
0033         __print_once = true;                \
0034         netdev_printk(level, dev, fmt, ##__VA_ARGS__);  \
0035     }                           \
0036 } while (0)
0037 
0038 #define netdev_emerg_once(dev, fmt, ...) \
0039     netdev_level_once(KERN_EMERG, dev, fmt, ##__VA_ARGS__)
0040 #define netdev_alert_once(dev, fmt, ...) \
0041     netdev_level_once(KERN_ALERT, dev, fmt, ##__VA_ARGS__)
0042 #define netdev_crit_once(dev, fmt, ...) \
0043     netdev_level_once(KERN_CRIT, dev, fmt, ##__VA_ARGS__)
0044 #define netdev_err_once(dev, fmt, ...) \
0045     netdev_level_once(KERN_ERR, dev, fmt, ##__VA_ARGS__)
0046 #define netdev_warn_once(dev, fmt, ...) \
0047     netdev_level_once(KERN_WARNING, dev, fmt, ##__VA_ARGS__)
0048 #define netdev_notice_once(dev, fmt, ...) \
0049     netdev_level_once(KERN_NOTICE, dev, fmt, ##__VA_ARGS__)
0050 #define netdev_info_once(dev, fmt, ...) \
0051     netdev_level_once(KERN_INFO, dev, fmt, ##__VA_ARGS__)
0052 
0053 #if defined(CONFIG_DYNAMIC_DEBUG) || \
0054     (defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
0055 #define netdev_dbg(__dev, format, args...)          \
0056 do {                                \
0057     dynamic_netdev_dbg(__dev, format, ##args);      \
0058 } while (0)
0059 #elif defined(DEBUG)
0060 #define netdev_dbg(__dev, format, args...)          \
0061     netdev_printk(KERN_DEBUG, __dev, format, ##args)
0062 #else
0063 #define netdev_dbg(__dev, format, args...)          \
0064 ({                              \
0065     if (0)                          \
0066         netdev_printk(KERN_DEBUG, __dev, format, ##args); \
0067 })
0068 #endif
0069 
0070 #if defined(VERBOSE_DEBUG)
0071 #define netdev_vdbg netdev_dbg
0072 #else
0073 
0074 #define netdev_vdbg(dev, format, args...)           \
0075 ({                              \
0076     if (0)                          \
0077         netdev_printk(KERN_DEBUG, dev, format, ##args); \
0078     0;                          \
0079 })
0080 #endif
0081 
0082 /* netif printk helpers, similar to netdev_printk */
0083 
0084 #define netif_printk(priv, type, level, dev, fmt, args...)  \
0085 do {                                \
0086     if (netif_msg_##type(priv))             \
0087         netdev_printk(level, (dev), fmt, ##args);   \
0088 } while (0)
0089 
0090 #define netif_level(level, priv, type, dev, fmt, args...)   \
0091 do {                                \
0092     if (netif_msg_##type(priv))             \
0093         netdev_##level(dev, fmt, ##args);       \
0094 } while (0)
0095 
0096 #define netif_emerg(priv, type, dev, fmt, args...)      \
0097     netif_level(emerg, priv, type, dev, fmt, ##args)
0098 #define netif_alert(priv, type, dev, fmt, args...)      \
0099     netif_level(alert, priv, type, dev, fmt, ##args)
0100 #define netif_crit(priv, type, dev, fmt, args...)       \
0101     netif_level(crit, priv, type, dev, fmt, ##args)
0102 #define netif_err(priv, type, dev, fmt, args...)        \
0103     netif_level(err, priv, type, dev, fmt, ##args)
0104 #define netif_warn(priv, type, dev, fmt, args...)       \
0105     netif_level(warn, priv, type, dev, fmt, ##args)
0106 #define netif_notice(priv, type, dev, fmt, args...)     \
0107     netif_level(notice, priv, type, dev, fmt, ##args)
0108 #define netif_info(priv, type, dev, fmt, args...)       \
0109     netif_level(info, priv, type, dev, fmt, ##args)
0110 
0111 #if defined(CONFIG_DYNAMIC_DEBUG) || \
0112     (defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
0113 #define netif_dbg(priv, type, netdev, format, args...)      \
0114 do {                                \
0115     if (netif_msg_##type(priv))             \
0116         dynamic_netdev_dbg(netdev, format, ##args); \
0117 } while (0)
0118 #elif defined(DEBUG)
0119 #define netif_dbg(priv, type, dev, format, args...)     \
0120     netif_printk(priv, type, KERN_DEBUG, dev, format, ##args)
0121 #else
0122 #define netif_dbg(priv, type, dev, format, args...)         \
0123 ({                                  \
0124     if (0)                              \
0125         netif_printk(priv, type, KERN_DEBUG, dev, format, ##args); \
0126     0;                              \
0127 })
0128 #endif
0129 
0130 /* if @cond then downgrade to debug, else print at @level */
0131 #define netif_cond_dbg(priv, type, netdev, cond, level, fmt, args...)     \
0132     do {                                                              \
0133         if (cond)                                                 \
0134             netif_dbg(priv, type, netdev, fmt, ##args);       \
0135         else                                                      \
0136             netif_ ## level(priv, type, netdev, fmt, ##args); \
0137     } while (0)
0138 
0139 #if defined(VERBOSE_DEBUG)
0140 #define netif_vdbg  netif_dbg
0141 #else
0142 #define netif_vdbg(priv, type, dev, format, args...)        \
0143 ({                              \
0144     if (0)                          \
0145         netif_printk(priv, type, KERN_DEBUG, dev, format, ##args); \
0146     0;                          \
0147 })
0148 #endif
0149 
0150 
0151 #if defined(CONFIG_DEBUG_NET)
0152 #define DEBUG_NET_WARN_ON_ONCE(cond) (void)WARN_ON_ONCE(cond)
0153 #else
0154 #define DEBUG_NET_WARN_ON_ONCE(cond) BUILD_BUG_ON_INVALID(cond)
0155 #endif
0156 
0157 #endif  /* _LINUX_NET_DEBUG_H */