[Devel] [PATCH VZ10 3/5] ve/printk: add ve_dev_printk_emit() helper

Pavel Tikhomirov ptikhomirov at virtuozzo.com
Tue Oct 7 11:50:27 MSK 2025


This follows the same logic as ve_printk:

1) In VE0 we always print to host-log, independent of dst.
2) In VEX we print to host-log if dst is VE0_LOG and to ve-log if dst is
   VE_LOG.

Will use it in next patch in the ve_netdev_printk() helper for printing
network device information.

https://virtuozzo.atlassian.net/browse/VSTOR-106826
Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
---
 drivers/base/core.c        | 30 ++++++++++++++++++++++++++++++
 include/linux/dev_printk.h |  2 ++
 2 files changed, 32 insertions(+)

diff --git a/drivers/base/core.c b/drivers/base/core.c
index 048ff98dbdfd8..687ea49661fb3 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -4958,6 +4958,36 @@ int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...)
 }
 EXPORT_SYMBOL(dev_printk_emit);
 
+static int ve_dev_vprintk_emit(int level, const struct device *dev, const char *fmt,
+			va_list args)
+{
+	struct dev_printk_info dev_info;
+
+	set_dev_info(dev, &dev_info);
+
+	return ve_vprintk_emit(0, level, &dev_info, fmt, args);
+}
+
+int ve_dev_printk_emit(int dst, int level, const struct device *dev, const char *fmt, ...)
+{
+	va_list args, args2;
+	int r;
+
+	va_start(args, fmt);
+	va_copy(args2, args);
+
+	if (ve_is_super(get_exec_env()) || (dst & VE0_LOG))
+		r = dev_vprintk_emit(level, dev, fmt, args);
+	if (!ve_is_super(get_exec_env()) && (dst & VE_LOG))
+		r = ve_dev_vprintk_emit(level, dev, fmt, args2);
+
+	va_end(args2);
+	va_end(args);
+
+	return r;
+}
+EXPORT_SYMBOL(ve_dev_printk_emit);
+
 static void __dev_printk(const char *level, const struct device *dev,
 			struct va_format *vaf)
 {
diff --git a/include/linux/dev_printk.h b/include/linux/dev_printk.h
index ca32b5bb28eb5..f9ab1dc1545be 100644
--- a/include/linux/dev_printk.h
+++ b/include/linux/dev_printk.h
@@ -36,6 +36,8 @@ int dev_vprintk_emit(int level, const struct device *dev,
 		     const char *fmt, va_list args);
 __printf(3, 4) __cold
 int dev_printk_emit(int level, const struct device *dev, const char *fmt, ...);
+__printf(4, 5) __cold
+int ve_dev_printk_emit(int dst, int level, const struct device *dev, const char *fmt, ...);
 
 __printf(3, 4) __cold
 void _dev_printk(const char *level, const struct device *dev,
-- 
2.51.0



More information about the Devel mailing list