.../admin-guide/kernel-parameters.txt | 5 +++ drivers/tty/hvc/hvc_xen.c | 33 ++++++++++++++++--- 2 files changed, 34 insertions(+), 4 deletions(-)
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>
---
.../admin-guide/kernel-parameters.txt | 5 +++
drivers/tty/hvc/hvc_xen.c | 33 ++++++++++++++++---
2 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index e88505e945d52..953d3f597f007 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -7620,6 +7620,11 @@
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..299b08c90bab1 100644
--- a/drivers/tty/hvc/hvc_xen.c
+++ b/drivers/tty/hvc/hvc_xen.c
@@ -51,6 +51,28 @@ 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)
+{
+ if (!arg)
+ return -EINVAL;
+
+ if (strcmp(arg, "off") == 0 ||
+ strcmp(arg, "disabled") == 0 ||
+ strcmp(arg, "0") == 0) {
+ opt_console_io = 0;
+ }
+ else if (strcmp(arg, "on") == 0 ||
+ strcmp(arg, "enabled") == 0 ||
+ strcmp(arg, "1") == 0) {
+ opt_console_io = 1;
+ }
+ return 0;
+}
+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 +353,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 +391,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 +623,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 +673,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
On 10.01.26 00:18, 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>
> ---
> .../admin-guide/kernel-parameters.txt | 5 +++
> drivers/tty/hvc/hvc_xen.c | 33 ++++++++++++++++---
> 2 files changed, 34 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
> index e88505e945d52..953d3f597f007 100644
> --- a/Documentation/admin-guide/kernel-parameters.txt
> +++ b/Documentation/admin-guide/kernel-parameters.txt
> @@ -7620,6 +7620,11 @@
> 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..299b08c90bab1 100644
> --- a/drivers/tty/hvc/hvc_xen.c
> +++ b/drivers/tty/hvc/hvc_xen.c
> @@ -51,6 +51,28 @@ 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)
> +{
> + if (!arg)
> + return -EINVAL;
> +
> + if (strcmp(arg, "off") == 0 ||
> + strcmp(arg, "disabled") == 0 ||
> + strcmp(arg, "0") == 0) {
> + opt_console_io = 0;
> + }
> + else if (strcmp(arg, "on") == 0 ||
> + strcmp(arg, "enabled") == 0 ||
> + strcmp(arg, "1") == 0) {
> + opt_console_io = 1;
> + }
I'd prefer use of kstrtobool() instead of open-coding something similar.
Juergen
© 2016 - 2026 Red Hat, Inc.