|
@@ -238,21 +238,29 @@ enum batadv_dbg_level {
|
|
|
int batadv_debug_log(struct batadv_priv *bat_priv, const char *fmt, ...)
|
|
|
__printf(2, 3);
|
|
|
|
|
|
-#define batadv_dbg(type, bat_priv, fmt, arg...) \
|
|
|
+/* possibly ratelimited debug output */
|
|
|
+#define _batadv_dbg(type, bat_priv, ratelimited, fmt, arg...) \
|
|
|
do { \
|
|
|
- if (atomic_read(&bat_priv->log_level) & type) \
|
|
|
+ if (atomic_read(&bat_priv->log_level) & type && \
|
|
|
+ (!ratelimited || net_ratelimit())) \
|
|
|
batadv_debug_log(bat_priv, fmt, ## arg);\
|
|
|
} \
|
|
|
while (0)
|
|
|
#else /* !CONFIG_BATMAN_ADV_DEBUG */
|
|
|
-__printf(3, 4)
|
|
|
-static inline void batadv_dbg(int type __always_unused,
|
|
|
- struct batadv_priv *bat_priv __always_unused,
|
|
|
- const char *fmt __always_unused, ...)
|
|
|
+__printf(4, 5)
|
|
|
+static inline void _batadv_dbg(int type __always_unused,
|
|
|
+ struct batadv_priv *bat_priv __always_unused,
|
|
|
+ int ratelimited __always_unused,
|
|
|
+ const char *fmt __always_unused, ...)
|
|
|
{
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+#define batadv_dbg(type, bat_priv, arg...) \
|
|
|
+ _batadv_dbg(type, bat_priv, 0, ## arg)
|
|
|
+#define batadv_dbg_ratelimited(type, bat_priv, arg...) \
|
|
|
+ _batadv_dbg(type, bat_priv, 1, ## arg)
|
|
|
+
|
|
|
#define batadv_info(net_dev, fmt, arg...) \
|
|
|
do { \
|
|
|
struct net_device *_netdev = (net_dev); \
|