libxl: default to xenconsoled for pv guests
authorIan Campbell <Ian.Campbell@citrix.com>
Fri, 11 May 2012 14:52:52 +0000 (15:52 +0100)
committerIan Campbell <Ian.Campbell@citrix.com>
Fri, 11 May 2012 14:52:52 +0000 (15:52 +0100)
Default to xenconsoled for pv guests, even if qemu is running.

Currently we prefer to use qemu for the disk backend if we are starting qemu
anyway (e.g. to service a disk).

Unfortunately qemu doesn't log the console, which xenconsoled can do via
XENCONSOLED_TRACE=guest. Since xenconsoled is also running anyway it seems like
there is no particular reason to prefer qemu just because it happens to be
running.

However we must use qemu if thereis more than one console (xenconsoled only
supports a single console).

Therefore push the logic to change the console backend down into
libxl__need_xenpv_qemu so that it can do the right thing.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
tools/libxl/libxl_create.c
tools/libxl/libxl_dm.c

index 7ab2f72200aa8a16cebf33c40cd4004288e492c0..6df20ca68939822269cd59bb3b4a6ff195def5cd 100644 (file)
@@ -682,9 +682,6 @@ static int do_domain_create(libxl__gc *gc, libxl_domain_config *d_config,
                 d_config->num_vfbs, d_config->vfbs,
                 d_config->num_disks, &d_config->disks[0]);
 
-        if (need_qemu)
-             console.consback = LIBXL__CONSOLE_BACKEND_IOEMU;
-
         libxl__device_console_add(gc, domid, &console, &state);
         libxl__device_console_dispose(&console);
 
index ec967f784a9782600cb97b38a5f64b05f9b135e3..36b07307c63e20f33a0695508e60579fcedebcff 100644 (file)
@@ -1095,7 +1095,13 @@ int libxl__need_xenpv_qemu(libxl__gc *gc,
 {
     int i, ret = 0;
 
+    /*
+     * qemu is required in order to support 2 or more consoles. So switch all
+     * backends to qemu if this is the case
+     */
     if (nr_consoles > 1) {
+        for (i = 0; i < nr_consoles; i++)
+            consoles[i].consback = LIBXL__CONSOLE_BACKEND_IOEMU;
         ret = 1;
         goto out;
     }