[PATCH v2] xen: introduce xen_console_io option

Stefano Stabellini posted 1 patch 3 weeks, 6 days ago
Failed in applying to current master (apply log)
There is a newer version of this series
.../admin-guide/kernel-parameters.txt         |  5 ++++
drivers/tty/hvc/hvc_xen.c                     | 27 ++++++++++++++++---
2 files changed, 28 insertions(+), 4 deletions(-)
[PATCH v2] xen: introduce xen_console_io option
Posted by Stefano Stabellini 3 weeks, 6 days ago
Xen can support console_io hypercalls for any domains, not just dom0,
depending on DEBUG and XSM policies. These hypercalls can be very useful
for development and debugging.

Introduce a kernel command line option xen_console_io to enable the
usage of console_io hypercalls for any domain upon request. When
xen_console_io is not specified, the current behavior is retained.

Signed-off-by: Stefano Stabellini <stefano.stabellini@amd.com>
---
Changes in v2:
- use kstrtobool
---
 .../admin-guide/kernel-parameters.txt         |  5 ++++
 drivers/tty/hvc/hvc_xen.c                     | 27 ++++++++++++++++---
 2 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index a8d0afde7f85a..68ab6fa72b685 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -8414,6 +8414,11 @@ Kernel parameters
 			save/restore/migration must be enabled to handle larger
 			domains.
 
+	xen_console_io	[XEN,EARLY]
+			Boolean option to enable/disable the usage of the Xen
+			console_io hypercalls to read and write to the console.
+			Mostly useful for debugging and development.
+
 	xen_emul_unplug=		[HW,X86,XEN,EARLY]
 			Unplug Xen emulated devices
 			Format: [unplug0,][unplug1]
diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
index 388a71afd6efe..c94cc7df78d36 100644
--- a/drivers/tty/hvc/hvc_xen.c
+++ b/drivers/tty/hvc/hvc_xen.c
@@ -51,6 +51,22 @@ static DEFINE_SPINLOCK(xencons_lock);
 
 /* ------------------------------------------------------------------ */
 
+static bool xen_console_io = false;
+static int __initdata opt_console_io = -1;
+
+static int __init parse_xen_console_io(char *arg)
+{
+	bool val;
+	int ret;
+
+	ret = kstrtobool(arg, &val);
+	if (ret == 0)
+		opt_console_io = (int)val;
+
+	return ret;
+}
+early_param("xen_console_io", parse_xen_console_io);
+
 static struct xencons_info *vtermno_to_xencons(int vtermno)
 {
 	struct xencons_info *entry, *ret = NULL;
@@ -331,7 +347,7 @@ static int xen_initial_domain_console_init(void)
 	struct xencons_info *info;
 	unsigned long flags;
 
-	if (!xen_initial_domain())
+	if (!xen_console_io)
 		return -ENODEV;
 
 	info = vtermno_to_xencons(HVC_COOKIE);
@@ -369,7 +385,7 @@ void xen_console_resume(void)
 {
 	struct xencons_info *info = vtermno_to_xencons(HVC_COOKIE);
 	if (info != NULL && info->irq) {
-		if (!xen_initial_domain())
+		if (!xen_console_io)
 			xen_console_update_evtchn(info);
 		rebind_evtchn_irq(info->evtchn, info->irq);
 	}
@@ -601,7 +617,7 @@ static int __init xen_hvc_init(void)
 	if (!xen_domain())
 		return -ENODEV;
 
-	if (xen_initial_domain()) {
+	if (xen_console_io) {
 		ops = &dom0_hvc_ops;
 		r = xen_initial_domain_console_init();
 		if (r < 0)
@@ -651,10 +667,13 @@ static int xen_cons_init(void)
 {
 	const struct hv_ops *ops;
 
+	xen_console_io = opt_console_io >= 0 ? opt_console_io :
+					       xen_initial_domain();
+
 	if (!xen_domain())
 		return 0;
 
-	if (xen_initial_domain())
+	if (xen_console_io)
 		ops = &dom0_hvc_ops;
 	else {
 		int r;
-- 
2.25.1
Re: [PATCH v2] xen: introduce xen_console_io option
Posted by Jürgen Groß 3 weeks, 5 days ago
On 13.01.26 01:24, Stefano Stabellini wrote:
> Xen can support console_io hypercalls for any domains, not just dom0,
> depending on DEBUG and XSM policies. These hypercalls can be very useful
> for development and debugging.
> 
> Introduce a kernel command line option xen_console_io to enable the
> usage of console_io hypercalls for any domain upon request. When
> xen_console_io is not specified, the current behavior is retained.
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@amd.com>

Reviewed-by: Juergen Gross <jgross@suse.com>


Juergen
Re: [PATCH v2] xen: introduce xen_console_io option
Posted by Juergen Gross 3 weeks, 5 days ago
On 13.01.26 08:57, Jürgen Groß wrote:
> On 13.01.26 01:24, Stefano Stabellini wrote:
>> Xen can support console_io hypercalls for any domains, not just dom0,
>> depending on DEBUG and XSM policies. These hypercalls can be very useful
>> for development and debugging.
>>
>> Introduce a kernel command line option xen_console_io to enable the
>> usage of console_io hypercalls for any domain upon request. When
>> xen_console_io is not specified, the current behavior is retained.
>>
>> Signed-off-by: Stefano Stabellini <stefano.stabellini@amd.com>
> 
> Reviewed-by: Juergen Gross <jgross@suse.com>

Sorry, I need to revoke my R-b.

I get:

WARNING: modpost: vmlinux: section mismatch in reference: xen_cons_init+0x0 
(section: .text) -> opt_console_io (section: .init.data)

I think xen_cons_init() should be __init, too.


Juergen
Re: [PATCH v2] xen: introduce xen_console_io option
Posted by Stefano Stabellini 3 weeks, 5 days ago
On Tue, 13 Jan 2026, Juergen Gross wrote:
> On 13.01.26 08:57, Jürgen Groß wrote:
> > On 13.01.26 01:24, Stefano Stabellini wrote:
> > > Xen can support console_io hypercalls for any domains, not just dom0,
> > > depending on DEBUG and XSM policies. These hypercalls can be very useful
> > > for development and debugging.
> > > 
> > > Introduce a kernel command line option xen_console_io to enable the
> > > usage of console_io hypercalls for any domain upon request. When
> > > xen_console_io is not specified, the current behavior is retained.
> > > 
> > > Signed-off-by: Stefano Stabellini <stefano.stabellini@amd.com>
> > 
> > Reviewed-by: Juergen Gross <jgross@suse.com>
> 
> Sorry, I need to revoke my R-b.
> 
> I get:
> 
> WARNING: modpost: vmlinux: section mismatch in reference: xen_cons_init+0x0
> (section: .text) -> opt_console_io (section: .init.data)
> 
> I think xen_cons_init() should be __init, too.

Yes you are right, good catch. I am cross-compiling x86 on ARM and my
environment is not warning me about it. I made the change.