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]
/* ------------------------------------------------------------------ */
+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;
struct xencons_info *info;
unsigned long flags;
- if (!xen_initial_domain())
+ if (!xen_console_io)
return -ENODEV;
info = vtermno_to_xencons(HVC_COOKIE);
{
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);
}
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)
}
device_initcall(xen_hvc_init);
-static int xen_cons_init(void)
+static int __init 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;