[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] xen: introduce xen_console_io option



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@xxxxxxx>
---
 .../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




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.