[Devel] [PATCH VZ10 4/5] ve/printk: Add ve_netdev_printk() helpers
Pavel Tikhomirov
ptikhomirov at virtuozzo.com
Tue Oct 7 11:50:28 MSK 2025
We need this to print network device information into ve log.
https://virtuozzo.atlassian.net/browse/VSTOR-106826
Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
---
include/net/net_debug.h | 7 ++++++
net/core/dev.c | 56 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 63 insertions(+)
diff --git a/include/net/net_debug.h b/include/net/net_debug.h
index 1e74684cbbdbc..2ba471ac5895b 100644
--- a/include/net/net_debug.h
+++ b/include/net/net_debug.h
@@ -25,6 +25,13 @@ void netdev_notice(const struct net_device *dev, const char *format, ...);
__printf(2, 3) __cold
void netdev_info(const struct net_device *dev, const char *format, ...);
+__printf(4, 5) __cold
+void ve_netdev_printk(const int dst, const char *level,
+ const struct net_device *dev, const char *format, ...);
+__printf(3, 4) __cold
+void ve_netdev_info(const int dst, const struct net_device *dev,
+ const char *format, ...);
+
#define netdev_level_once(level, dev, fmt, ...) \
do { \
static bool __section(".data.once") __print_once; \
diff --git a/net/core/dev.c b/net/core/dev.c
index 6c7c55c9b7caf..2adeff25fb9a6 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -11922,6 +11922,62 @@ define_netdev_printk_level(netdev_warn, KERN_WARNING);
define_netdev_printk_level(netdev_notice, KERN_NOTICE);
define_netdev_printk_level(netdev_info, KERN_INFO);
+static void __ve_netdev_printk(int dst, const char *level,
+ const struct net_device *dev,
+ struct va_format *vaf)
+{
+ if (dev && dev->dev.parent) {
+ ve_dev_printk_emit(dst, level[1] - '0',
+ dev->dev.parent,
+ "%s %s %s%s: %pV",
+ dev_driver_string(dev->dev.parent),
+ dev_name(dev->dev.parent),
+ netdev_name(dev), netdev_reg_state(dev),
+ vaf);
+ } else if (dev) {
+ ve_printk(dst, "%s%s%s: %pV",
+ level, netdev_name(dev), netdev_reg_state(dev), vaf);
+ } else {
+ ve_printk(dst, "%s(NULL net_device): %pV", level, vaf);
+ }
+}
+
+void ve_netdev_printk(int dst, const char *level, const struct net_device *dev,
+ const char *format, ...)
+{
+ struct va_format vaf;
+ va_list args;
+
+ va_start(args, format);
+
+ vaf.fmt = format;
+ vaf.va = &args;
+
+ __ve_netdev_printk(dst, level, dev, &vaf);
+
+ va_end(args);
+}
+EXPORT_SYMBOL(ve_netdev_printk);
+
+#define define_ve_netdev_printk_level(func, level) \
+void func(int dst, const struct net_device *dev, const char *fmt, ...) \
+{ \
+ struct va_format vaf; \
+ va_list args; \
+ \
+ va_start(args, fmt); \
+ \
+ vaf.fmt = fmt; \
+ vaf.va = &args; \
+ \
+ __ve_netdev_printk(dst, level, dev, &vaf); \
+ \
+ va_end(args); \
+} \
+EXPORT_SYMBOL(func);
+
+define_ve_netdev_printk_level(ve_netdev_info, KERN_INFO);
+
static void __net_exit netdev_exit(struct net *net)
{
kfree(net->dev_name_head);
--
2.51.0
More information about the Devel
mailing list