0001
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
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
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