Merge tag 'linux-kselftest-fixes-6.2-rc5' of git://git.kernel.org/pub/scm/linux/kerne...
[platform/kernel/linux-rpi.git] / include / net / net_debug.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_NET_DEBUG_H
3 #define _LINUX_NET_DEBUG_H
4
5 #include <linux/bug.h>
6 #include <linux/kern_levels.h>
7
8 struct net_device;
9
10 __printf(3, 4) __cold
11 void netdev_printk(const char *level, const struct net_device *dev,
12                    const char *format, ...);
13 __printf(2, 3) __cold
14 void netdev_emerg(const struct net_device *dev, const char *format, ...);
15 __printf(2, 3) __cold
16 void netdev_alert(const struct net_device *dev, const char *format, ...);
17 __printf(2, 3) __cold
18 void netdev_crit(const struct net_device *dev, const char *format, ...);
19 __printf(2, 3) __cold
20 void netdev_err(const struct net_device *dev, const char *format, ...);
21 __printf(2, 3) __cold
22 void netdev_warn(const struct net_device *dev, const char *format, ...);
23 __printf(2, 3) __cold
24 void netdev_notice(const struct net_device *dev, const char *format, ...);
25 __printf(2, 3) __cold
26 void netdev_info(const struct net_device *dev, const char *format, ...);
27
28 #define netdev_level_once(level, dev, fmt, ...)                 \
29 do {                                                            \
30         static bool __section(".data.once") __print_once;       \
31                                                                 \
32         if (!__print_once) {                                    \
33                 __print_once = true;                            \
34                 netdev_printk(level, dev, fmt, ##__VA_ARGS__);  \
35         }                                                       \
36 } while (0)
37
38 #define netdev_emerg_once(dev, fmt, ...) \
39         netdev_level_once(KERN_EMERG, dev, fmt, ##__VA_ARGS__)
40 #define netdev_alert_once(dev, fmt, ...) \
41         netdev_level_once(KERN_ALERT, dev, fmt, ##__VA_ARGS__)
42 #define netdev_crit_once(dev, fmt, ...) \
43         netdev_level_once(KERN_CRIT, dev, fmt, ##__VA_ARGS__)
44 #define netdev_err_once(dev, fmt, ...) \
45         netdev_level_once(KERN_ERR, dev, fmt, ##__VA_ARGS__)
46 #define netdev_warn_once(dev, fmt, ...) \
47         netdev_level_once(KERN_WARNING, dev, fmt, ##__VA_ARGS__)
48 #define netdev_notice_once(dev, fmt, ...) \
49         netdev_level_once(KERN_NOTICE, dev, fmt, ##__VA_ARGS__)
50 #define netdev_info_once(dev, fmt, ...) \
51         netdev_level_once(KERN_INFO, dev, fmt, ##__VA_ARGS__)
52
53 #if defined(CONFIG_DYNAMIC_DEBUG) || \
54         (defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
55 #define netdev_dbg(__dev, format, args...)                      \
56 do {                                                            \
57         dynamic_netdev_dbg(__dev, format, ##args);              \
58 } while (0)
59 #elif defined(DEBUG)
60 #define netdev_dbg(__dev, format, args...)                      \
61         netdev_printk(KERN_DEBUG, __dev, format, ##args)
62 #else
63 #define netdev_dbg(__dev, format, args...)                      \
64 ({                                                              \
65         if (0)                                                  \
66                 netdev_printk(KERN_DEBUG, __dev, format, ##args); \
67 })
68 #endif
69
70 #if defined(VERBOSE_DEBUG)
71 #define netdev_vdbg     netdev_dbg
72 #else
73
74 #define netdev_vdbg(dev, format, args...)                       \
75 ({                                                              \
76         if (0)                                                  \
77                 netdev_printk(KERN_DEBUG, dev, format, ##args); \
78         0;                                                      \
79 })
80 #endif
81
82 /* netif printk helpers, similar to netdev_printk */
83
84 #define netif_printk(priv, type, level, dev, fmt, args...)      \
85 do {                                                            \
86         if (netif_msg_##type(priv))                             \
87                 netdev_printk(level, (dev), fmt, ##args);       \
88 } while (0)
89
90 #define netif_level(level, priv, type, dev, fmt, args...)       \
91 do {                                                            \
92         if (netif_msg_##type(priv))                             \
93                 netdev_##level(dev, fmt, ##args);               \
94 } while (0)
95
96 #define netif_emerg(priv, type, dev, fmt, args...)              \
97         netif_level(emerg, priv, type, dev, fmt, ##args)
98 #define netif_alert(priv, type, dev, fmt, args...)              \
99         netif_level(alert, priv, type, dev, fmt, ##args)
100 #define netif_crit(priv, type, dev, fmt, args...)               \
101         netif_level(crit, priv, type, dev, fmt, ##args)
102 #define netif_err(priv, type, dev, fmt, args...)                \
103         netif_level(err, priv, type, dev, fmt, ##args)
104 #define netif_warn(priv, type, dev, fmt, args...)               \
105         netif_level(warn, priv, type, dev, fmt, ##args)
106 #define netif_notice(priv, type, dev, fmt, args...)             \
107         netif_level(notice, priv, type, dev, fmt, ##args)
108 #define netif_info(priv, type, dev, fmt, args...)               \
109         netif_level(info, priv, type, dev, fmt, ##args)
110
111 #if defined(CONFIG_DYNAMIC_DEBUG) || \
112         (defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
113 #define netif_dbg(priv, type, netdev, format, args...)          \
114 do {                                                            \
115         if (netif_msg_##type(priv))                             \
116                 dynamic_netdev_dbg(netdev, format, ##args);     \
117 } while (0)
118 #elif defined(DEBUG)
119 #define netif_dbg(priv, type, dev, format, args...)             \
120         netif_printk(priv, type, KERN_DEBUG, dev, format, ##args)
121 #else
122 #define netif_dbg(priv, type, dev, format, args...)                     \
123 ({                                                                      \
124         if (0)                                                          \
125                 netif_printk(priv, type, KERN_DEBUG, dev, format, ##args); \
126         0;                                                              \
127 })
128 #endif
129
130 /* if @cond then downgrade to debug, else print at @level */
131 #define netif_cond_dbg(priv, type, netdev, cond, level, fmt, args...)     \
132         do {                                                              \
133                 if (cond)                                                 \
134                         netif_dbg(priv, type, netdev, fmt, ##args);       \
135                 else                                                      \
136                         netif_ ## level(priv, type, netdev, fmt, ##args); \
137         } while (0)
138
139 #if defined(VERBOSE_DEBUG)
140 #define netif_vdbg      netif_dbg
141 #else
142 #define netif_vdbg(priv, type, dev, format, args...)            \
143 ({                                                              \
144         if (0)                                                  \
145                 netif_printk(priv, type, KERN_DEBUG, dev, format, ##args); \
146         0;                                                      \
147 })
148 #endif
149
150
151 #if defined(CONFIG_DEBUG_NET)
152 #define DEBUG_NET_WARN_ON_ONCE(cond) (void)WARN_ON_ONCE(cond)
153 #else
154 #define DEBUG_NET_WARN_ON_ONCE(cond) BUILD_BUG_ON_INVALID(cond)
155 #endif
156
157 #endif  /* _LINUX_NET_DEBUG_H */