]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix handling of Xen(ner) detection
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 25 Aug 2009 13:17:29 +0000 (14:17 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 22 Sep 2009 15:13:33 +0000 (16:13 +0100)
Latest upstream QEMU can be built with Xen support, which introduces
a -xen-domid argument. This was  mistakenly detected as -domid due
to old Xenner support. Adapt to cope with both syntax. Also only
set domid if the virt type is xen, or the guest type is xen

* src/qemu_conf.c, src/qemu_conf.h: Detect new -xen-domid flag in
  preference to -domid.
* tests/qemuxml2argvdata/qemuxml2argv-bootloader.args,
  tests/qemuxml2argvdata/qemuxml2argv-input-xen.args: Add missing
  -domid param
* tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.args: Remove bogus
  -boot param.
* tests/qemuxml2argvtest.c: Add missing QEMUD_CMD_FLAG_DOMID params

src/qemu/qemu_conf.c
src/qemu/qemu_conf.h
tests/qemuxml2argvdata/qemuxml2argv-bootloader.args
tests/qemuxml2argvdata/qemuxml2argv-input-xen.args
tests/qemuxml2argvdata/qemuxml2argv-misc-uuid.args
tests/qemuxml2argvtest.c

index 273aecac76fa260a461a2337f0c82466a030baff..8f2774bb9b24b1a56e66a60ca88e632d3994bba0 100644 (file)
@@ -851,7 +851,9 @@ static unsigned int qemudComputeCmdFlags(const char *help,
         flags |= QEMUD_CMD_FLAG_NAME;
     if (strstr(help, "-uuid"))
         flags |= QEMUD_CMD_FLAG_UUID;
-    if (strstr(help, "-domid"))
+    if (strstr(help, "-xen-domid"))
+        flags |= QEMUD_CMD_FLAG_XEN_DOMID;
+    else if (strstr(help, "-domid"))
         flags |= QEMUD_CMD_FLAG_DOMID;
     if (strstr(help, "-drive")) {
         flags |= QEMUD_CMD_FLAG_DRIVE;
@@ -1720,9 +1722,22 @@ int qemudBuildCommandLine(virConnectPtr conn,
         ADD_ARG_LIT("-uuid");
         ADD_ARG_LIT(uuid);
     }
-    if (qemuCmdFlags & QEMUD_CMD_FLAG_DOMID) {
-        ADD_ARG_LIT("-domid");
-        ADD_ARG_LIT(domid);
+    if (def->virtType == VIR_DOMAIN_VIRT_XEN ||
+        STREQ(def->os.type, "xen") ||
+        STREQ(def->os.type, "linux")) {
+        if (qemuCmdFlags & QEMUD_CMD_FLAG_DOMID) {
+            ADD_ARG_LIT("-domid");
+            ADD_ARG_LIT(domid);
+        } else if (qemuCmdFlags & QEMUD_CMD_FLAG_XEN_DOMID) {
+            ADD_ARG_LIT("-xen-attach");
+            ADD_ARG_LIT("-xen-domid");
+            ADD_ARG_LIT(domid);
+        } else {
+            qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+                             _("qemu emulator '%s' does not support xen"),
+                             def->emulator);
+            goto error;
+        }
     }
 
     /*
@@ -1775,9 +1790,11 @@ int qemudBuildCommandLine(virConnectPtr conn,
                 break;
             }
         }
-        boot[def->os.nBootDevs] = '\0';
-        ADD_ARG_LIT("-boot");
-        ADD_ARG_LIT(boot);
+        if (def->os.nBootDevs) {
+            boot[def->os.nBootDevs] = '\0';
+            ADD_ARG_LIT("-boot");
+            ADD_ARG_LIT(boot);
+        }
 
         if (def->os.kernel) {
             ADD_ARG_LIT("-kernel");
index 7b35b6d9cf212b17475842d16b38c043af5bfdde..82eb89f84820a09832ef25b46b82f466a18b7344 100644 (file)
@@ -69,6 +69,7 @@ enum qemud_cmd_flags {
     QEMUD_CMD_FLAG_PCIDEVICE     = (1 << 17), /* PCI device assignment only supported by qemu-kvm */
     QEMUD_CMD_FLAG_MEM_PATH      = (1 << 18), /* mmap'ped guest backing supported */
     QEMUD_CMD_FLAG_DRIVE_SERIAL  = (1 << 19), /* -driver serial=  available */
+    QEMUD_CMD_FLAG_XEN_DOMID     = (1 << 20), /* -xen-domid (new style xen integration) */
 };
 
 /* Main driver state */
index 8a15524da27a95e7540c9708f734fa9d7a0eb666..bcae18a68240fafe49db9b762b3bbf96e42eb612 100644 (file)
@@ -1 +1 @@
-LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/xenner -S -M xenner -m 214 -smp 1 -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -bootloader /usr/bin/pygrub -cdrom /dev/cdrom -net none -serial none -parallel none -usb
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/xenner -S -M xenner -m 214 -smp 1 -domid 6 -nographic -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -bootloader /usr/bin/pygrub -cdrom /dev/cdrom -net none -serial none -parallel none -usb
index 64c0e1cb4c13176a9e9e4bd9819c129a10f8383a..65fb07318e9ca32ef92a2cadbf063bcb931690e9 100644 (file)
@@ -1 +1 @@
-LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/xenner -S -M xenner -m 214 -smp 1 -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -bootloader /foo -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb -vnc 127.0.0.1:3
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/xenner -S -M xenner -m 214 -smp 1 -domid 6 -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -bootloader /foo -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb -vnc 127.0.0.1:3
index c735dc7be4a388eb826cd3eaa2594ee3d077b512..e949a6013ad34e57559f30a689ae999af2c3acdc 100644 (file)
@@ -1 +1 @@
-LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -name QEMUGuest1 -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 -domid 6 -nographic -monitor unix:/tmp/test-monitor,server,nowait -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -name QEMUGuest1 -uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 -nographic -monitor unix:/tmp/test-monitor,server,nowait -boot c -hda /dev/HostVG/QEMUGuest1 -net none -serial none -parallel none -usb
index 8318a2c998fb28286a51908f3613a43fb867b08c..32551468ce8d4b97968779f0fe8e4feabf599b01 100644 (file)
@@ -195,7 +195,7 @@ mymain(int argc, char **argv)
     DO_TEST("boot-cdrom", 0);
     DO_TEST("boot-network", 0);
     DO_TEST("boot-floppy", 0);
-    DO_TEST("bootloader", 0);
+    DO_TEST("bootloader", QEMUD_CMD_FLAG_DOMID);
     DO_TEST("clock-utc", 0);
     DO_TEST("clock-localtime", 0);
     DO_TEST("hugepages", QEMUD_CMD_FLAG_MEM_PATH);
@@ -246,11 +246,11 @@ mymain(int argc, char **argv)
     DO_TEST("graphics-sdl-fullscreen", 0);
     DO_TEST("input-usbmouse", 0);
     DO_TEST("input-usbtablet", 0);
-    DO_TEST("input-xen", 0);
+    DO_TEST("input-xen", QEMUD_CMD_FLAG_DOMID);
     DO_TEST("misc-acpi", 0);
     DO_TEST("misc-no-reboot", 0);
     DO_TEST("misc-uuid", QEMUD_CMD_FLAG_NAME |
-        QEMUD_CMD_FLAG_UUID | QEMUD_CMD_FLAG_DOMID);
+            QEMUD_CMD_FLAG_UUID);
     DO_TEST("net-user", 0);
     DO_TEST("net-virtio", 0);
     DO_TEST("net-eth", 0);