[libvirt] [PATCH 0/5] libxl: improve xl config parsing

This series was inspired by Marek's and Chunyan's patches to add support for <kernel>, <initrd>, and <cmdline> in Xen HVM domain config https://www.redhat.com/archives/libvir-list/2015-March/msg00328.html https://www.redhat.com/archives/libvir-list/2014-September/msg01006.html Patches 1 and 2 are trivial prep for patch 3, which moves parsing and formatting of <os> config out of the common code and into the xl and xm specfic parsing/formatting code. For ease of review, identical copies of xen{Parse,Format}OS are made in xen_{xl,xm}.c. Changes to the xl parsing/formatting functions are made in patch 4 and 5. Changing the order in which config is parsed/formatted has the unfortunate side affect of requiring corresponding changes to the test config data files. Patch 3 shoulders that burden. Jim Fehlig (5): xenconfig: export xenConfigCopyString xenconfig: remove redunant parsing of device_model xenconfig: move <os> parsing/formating to config-specific files xenconfig: don't use "kernel" for hvmloader libxl: support HVM direct kernel boot src/libxl/libxl_conf.c | 9 ++ src/xenconfig/xen_common.c | 146 +---------------- src/xenconfig/xen_common.h | 5 + src/xenconfig/xen_xl.c | 178 +++++++++++++++++++++ src/xenconfig/xen_xm.c | 141 ++++++++++++++++ tests/testutilsxen.c | 8 +- .../test-fullvirt-direct-kernel-boot.cfg | 29 ++++ .../test-fullvirt-direct-kernel-boot.xml | 49 ++++++ tests/xlconfigdata/test-fullvirt-multiusb.cfg | 5 +- tests/xlconfigdata/test-new-disk.cfg | 5 +- tests/xlconfigdata/test-spice.cfg | 5 +- tests/xlconfigtest.c | 3 + tests/xmconfigdata/test-escape-paths.cfg | 6 +- tests/xmconfigdata/test-fullvirt-force-hpet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-force-nohpet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-localtime.cfg | 6 +- tests/xmconfigdata/test-fullvirt-net-ioemu.cfg | 6 +- tests/xmconfigdata/test-fullvirt-net-netfront.cfg | 6 +- tests/xmconfigdata/test-fullvirt-new-cdrom.cfg | 6 +- tests/xmconfigdata/test-fullvirt-old-cdrom.cfg | 6 +- tests/xmconfigdata/test-fullvirt-parallel-tcp.cfg | 6 +- .../test-fullvirt-serial-dev-2-ports.cfg | 6 +- .../test-fullvirt-serial-dev-2nd-port.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-file.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-null.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-pipe.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-pty.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-stdio.cfg | 6 +- .../test-fullvirt-serial-tcp-telnet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-tcp.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-udp.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-unix.cfg | 6 +- tests/xmconfigdata/test-fullvirt-sound.cfg | 6 +- tests/xmconfigdata/test-fullvirt-usbmouse.cfg | 6 +- tests/xmconfigdata/test-fullvirt-usbtablet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-utc.cfg | 6 +- tests/xmconfigdata/test-no-source-cdrom.cfg | 6 +- tests/xmconfigdata/test-paravirt-net-e1000.cfg | 2 +- tests/xmconfigdata/test-paravirt-net-vifname.cfg | 2 +- .../test-paravirt-new-pvfb-vncdisplay.cfg | 2 +- tests/xmconfigdata/test-paravirt-new-pvfb.cfg | 2 +- .../test-paravirt-old-pvfb-vncdisplay.cfg | 2 +- tests/xmconfigdata/test-paravirt-old-pvfb.cfg | 2 +- tests/xmconfigdata/test-paravirt-vcpu.cfg | 2 +- tests/xmconfigdata/test-pci-devs.cfg | 6 +- 45 files changed, 511 insertions(+), 242 deletions(-) create mode 100644 tests/xlconfigdata/test-fullvirt-direct-kernel-boot.cfg create mode 100644 tests/xlconfigdata/test-fullvirt-direct-kernel-boot.xml -- 1.8.4.5

Export xenConfigCopyString for use outside of xen_common.c Signed-off-by: Jim Fehlig <jfehlig@suse.com> --- src/xenconfig/xen_common.c | 2 +- src/xenconfig/xen_common.h | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c index 5f8eb71..82e8d3a 100644 --- a/src/xenconfig/xen_common.c +++ b/src/xenconfig/xen_common.c @@ -172,7 +172,7 @@ xenConfigCopyStringInternal(virConfPtr conf, } -static int +int xenConfigCopyString(virConfPtr conf, const char *name, char **value) { return xenConfigCopyStringInternal(conf, name, value, 0); diff --git a/src/xenconfig/xen_common.h b/src/xenconfig/xen_common.h index e993b21..0116703 100644 --- a/src/xenconfig/xen_common.h +++ b/src/xenconfig/xen_common.h @@ -43,6 +43,11 @@ int xenConfigGetULong(virConfPtr conf, unsigned long *value, unsigned long def); +int +xenConfigCopyString(virConfPtr conf, + const char *name, + char **value); + int xenConfigCopyStringOpt(virConfPtr conf, const char *name, char **value); -- 1.8.4.5

device_model is parsed in xenParseOS(), then later in xenParseConfigCommon(). <emulator> is not part of <os>, so makes sense to remove the parsing in xenParseOS(). Signed-off-by: Jim Fehlig <jfehlig@suse.com> --- src/xenconfig/xen_common.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c index 82e8d3a..883e31d 100644 --- a/src/xenconfig/xen_common.c +++ b/src/xenconfig/xen_common.c @@ -1029,9 +1029,6 @@ xenParseOS(virConfPtr conf, virDomainDefPtr def) { size_t i; - if (xenConfigCopyStringOpt(conf, "device_model", &def->emulator) < 0) - return -1; - if (STREQ(def->os.type, "hvm")) { const char *boot; -- 1.8.4.5

xl and xm differ a bit in how <os> configuration is represented. E.g. xl config supports <os><nvram .../></os> via its "bios" setting. Move the xenParseOS and xenFormatOS functions from xen_common.c and copy to xen_xl.c and xen_xm.c so they can be customized for xm vs xl config. An unfortunate fallout is reordering of entries in the test config files. Signed-off-by: Jim Fehlig <jfehlig@suse.com> --- src/xenconfig/xen_common.c | 141 --------------------- src/xenconfig/xen_xl.c | 141 +++++++++++++++++++++ src/xenconfig/xen_xm.c | 141 +++++++++++++++++++++ tests/xlconfigdata/test-fullvirt-multiusb.cfg | 6 +- tests/xlconfigdata/test-new-disk.cfg | 6 +- tests/xlconfigdata/test-spice.cfg | 6 +- tests/xmconfigdata/test-escape-paths.cfg | 6 +- tests/xmconfigdata/test-fullvirt-force-hpet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-force-nohpet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-localtime.cfg | 6 +- tests/xmconfigdata/test-fullvirt-net-ioemu.cfg | 6 +- tests/xmconfigdata/test-fullvirt-net-netfront.cfg | 6 +- tests/xmconfigdata/test-fullvirt-new-cdrom.cfg | 6 +- tests/xmconfigdata/test-fullvirt-old-cdrom.cfg | 6 +- tests/xmconfigdata/test-fullvirt-parallel-tcp.cfg | 6 +- .../test-fullvirt-serial-dev-2-ports.cfg | 6 +- .../test-fullvirt-serial-dev-2nd-port.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-file.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-null.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-pipe.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-pty.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-stdio.cfg | 6 +- .../test-fullvirt-serial-tcp-telnet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-tcp.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-udp.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-unix.cfg | 6 +- tests/xmconfigdata/test-fullvirt-sound.cfg | 6 +- tests/xmconfigdata/test-fullvirt-usbmouse.cfg | 6 +- tests/xmconfigdata/test-fullvirt-usbtablet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-utc.cfg | 6 +- tests/xmconfigdata/test-no-source-cdrom.cfg | 6 +- tests/xmconfigdata/test-paravirt-net-e1000.cfg | 2 +- tests/xmconfigdata/test-paravirt-net-vifname.cfg | 2 +- .../test-paravirt-new-pvfb-vncdisplay.cfg | 2 +- tests/xmconfigdata/test-paravirt-new-pvfb.cfg | 2 +- .../test-paravirt-old-pvfb-vncdisplay.cfg | 2 +- tests/xmconfigdata/test-paravirt-old-pvfb.cfg | 2 +- tests/xmconfigdata/test-paravirt-vcpu.cfg | 2 +- tests/xmconfigdata/test-pci-devs.cfg | 6 +- 39 files changed, 376 insertions(+), 235 deletions(-) diff --git a/src/xenconfig/xen_common.c b/src/xenconfig/xen_common.c index 883e31d..7ae2d4a 100644 --- a/src/xenconfig/xen_common.c +++ b/src/xenconfig/xen_common.c @@ -1024,72 +1024,6 @@ xenParseGeneralMeta(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps) } -static int -xenParseOS(virConfPtr conf, virDomainDefPtr def) -{ - size_t i; - - if (STREQ(def->os.type, "hvm")) { - const char *boot; - - if (VIR_ALLOC(def->os.loader) < 0 || - xenConfigCopyString(conf, "kernel", &def->os.loader->path) < 0) - return -1; - - if (xenConfigGetString(conf, "boot", &boot, "c") < 0) - return -1; - - for (i = 0; i < VIR_DOMAIN_BOOT_LAST && boot[i]; i++) { - switch (boot[i]) { - case 'a': - def->os.bootDevs[i] = VIR_DOMAIN_BOOT_FLOPPY; - break; - case 'd': - def->os.bootDevs[i] = VIR_DOMAIN_BOOT_CDROM; - break; - case 'n': - def->os.bootDevs[i] = VIR_DOMAIN_BOOT_NET; - break; - case 'c': - default: - def->os.bootDevs[i] = VIR_DOMAIN_BOOT_DISK; - break; - } - def->os.nBootDevs++; - } - } else { - const char *extra, *root; - - if (xenConfigCopyStringOpt(conf, "bootloader", &def->os.bootloader) < 0) - return -1; - if (xenConfigCopyStringOpt(conf, "bootargs", &def->os.bootloaderArgs) < 0) - return -1; - - if (xenConfigCopyStringOpt(conf, "kernel", &def->os.kernel) < 0) - return -1; - - if (xenConfigCopyStringOpt(conf, "ramdisk", &def->os.initrd) < 0) - return -1; - - if (xenConfigGetString(conf, "extra", &extra, NULL) < 0) - return -1; - - if (xenConfigGetString(conf, "root", &root, NULL) < 0) - return -1; - - if (root) { - if (virAsprintf(&def->os.cmdline, "root=%s %s", root, extra) < 0) - return -1; - } else { - if (VIR_STRDUP(def->os.cmdline, extra) < 0) - return -1; - } - } - - return 0; -} - - /* * A convenience function for parsing all config common to both XM and XL */ @@ -1102,9 +1036,6 @@ xenParseConfigCommon(virConfPtr conf, if (xenParseGeneralMeta(conf, def, caps) < 0) return -1; - if (xenParseOS(conf, def) < 0) - return -1; - if (xenParseMem(conf, def) < 0) return -1; @@ -1711,75 +1642,6 @@ xenFormatCDROM(virConfPtr conf, virDomainDefPtr def, int xendConfigVersion) static int -xenFormatOS(virConfPtr conf, virDomainDefPtr def) -{ - size_t i; - - if (STREQ(def->os.type, "hvm")) { - char boot[VIR_DOMAIN_BOOT_LAST+1]; - if (xenConfigSetString(conf, "builder", "hvm") < 0) - return -1; - - if (def->os.loader && def->os.loader->path && - xenConfigSetString(conf, "kernel", def->os.loader->path) < 0) - return -1; - - for (i = 0; i < def->os.nBootDevs; i++) { - switch (def->os.bootDevs[i]) { - case VIR_DOMAIN_BOOT_FLOPPY: - boot[i] = 'a'; - break; - case VIR_DOMAIN_BOOT_CDROM: - boot[i] = 'd'; - break; - case VIR_DOMAIN_BOOT_NET: - boot[i] = 'n'; - break; - case VIR_DOMAIN_BOOT_DISK: - default: - boot[i] = 'c'; - break; - } - } - - if (!def->os.nBootDevs) { - boot[0] = 'c'; - boot[1] = '\0'; - } else { - boot[def->os.nBootDevs] = '\0'; - } - - if (xenConfigSetString(conf, "boot", boot) < 0) - return -1; - - /* XXX floppy disks */ - } else { - if (def->os.bootloader && - xenConfigSetString(conf, "bootloader", def->os.bootloader) < 0) - return -1; - - if (def->os.bootloaderArgs && - xenConfigSetString(conf, "bootargs", def->os.bootloaderArgs) < 0) - return -1; - - if (def->os.kernel && - xenConfigSetString(conf, "kernel", def->os.kernel) < 0) - return -1; - - if (def->os.initrd && - xenConfigSetString(conf, "ramdisk", def->os.initrd) < 0) - return -1; - - if (def->os.cmdline && - xenConfigSetString(conf, "extra", def->os.cmdline) < 0) - return -1; - } /* !hvm */ - - return 0; -} - - -static int xenFormatVfb(virConfPtr conf, virDomainDefPtr def, int xendConfigVersion) { int hvm = STREQ(def->os.type, "hvm") ? 1 : 0; @@ -1977,9 +1839,6 @@ xenFormatConfigCommon(virConfPtr conf, if (xenFormatCPUAllocation(conf, def) < 0) return -1; - if (xenFormatOS(conf, def) < 0) - return -1; - if (xenFormatCPUFeatures(conf, def, xendConfigVersion) < 0) return -1; diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c index f127ebe..1af162a 100644 --- a/src/xenconfig/xen_xl.c +++ b/src/xenconfig/xen_xl.c @@ -59,6 +59,72 @@ extern int xlu_disk_parse(XLU_Config *cfg, #endif static int +xenParseXLOS(virConfPtr conf, virDomainDefPtr def) +{ + size_t i; + + if (STREQ(def->os.type, "hvm")) { + const char *boot; + + if (VIR_ALLOC(def->os.loader) < 0 || + xenConfigCopyString(conf, "kernel", &def->os.loader->path) < 0) + return -1; + + if (xenConfigGetString(conf, "boot", &boot, "c") < 0) + return -1; + + for (i = 0; i < VIR_DOMAIN_BOOT_LAST && boot[i]; i++) { + switch (boot[i]) { + case 'a': + def->os.bootDevs[i] = VIR_DOMAIN_BOOT_FLOPPY; + break; + case 'd': + def->os.bootDevs[i] = VIR_DOMAIN_BOOT_CDROM; + break; + case 'n': + def->os.bootDevs[i] = VIR_DOMAIN_BOOT_NET; + break; + case 'c': + default: + def->os.bootDevs[i] = VIR_DOMAIN_BOOT_DISK; + break; + } + def->os.nBootDevs++; + } + } else { + const char *extra, *root; + + if (xenConfigCopyStringOpt(conf, "bootloader", &def->os.bootloader) < 0) + return -1; + if (xenConfigCopyStringOpt(conf, "bootargs", &def->os.bootloaderArgs) < 0) + return -1; + + if (xenConfigCopyStringOpt(conf, "kernel", &def->os.kernel) < 0) + return -1; + + if (xenConfigCopyStringOpt(conf, "ramdisk", &def->os.initrd) < 0) + return -1; + + if (xenConfigGetString(conf, "extra", &extra, NULL) < 0) + return -1; + + if (xenConfigGetString(conf, "root", &root, NULL) < 0) + return -1; + + if (root) { + if (virAsprintf(&def->os.cmdline, "root=%s %s", root, extra) < 0) + return -1; + } else { + if (VIR_STRDUP(def->os.cmdline, extra) < 0) + return -1; + } + } + + return 0; +} + + +static int xenParseXLSpice(virConfPtr conf, virDomainDefPtr def) { virDomainGraphicsDefPtr graphics = NULL; @@ -357,6 +423,9 @@ xenParseXL(virConfPtr conf, virCapsPtr caps, int xendConfigVersion) if (xenParseConfigCommon(conf, def, caps, xendConfigVersion) < 0) goto cleanup; + if (xenParseXLOS(conf, def) < 0) + goto cleanup; + if (xenParseXLDisk(conf, def) < 0) goto cleanup; @@ -375,6 +444,75 @@ xenParseXL(virConfPtr conf, virCapsPtr caps, int xendConfigVersion) static int +xenFormatXLOS(virConfPtr conf, virDomainDefPtr def) +{ + size_t i; + + if (STREQ(def->os.type, "hvm")) { + char boot[VIR_DOMAIN_BOOT_LAST+1]; + if (xenConfigSetString(conf, "builder", "hvm") < 0) + return -1; + + if (def->os.loader && def->os.loader->path && + xenConfigSetString(conf, "kernel", def->os.loader->path) < 0) + return -1; + + for (i = 0; i < def->os.nBootDevs; i++) { + switch (def->os.bootDevs[i]) { + case VIR_DOMAIN_BOOT_FLOPPY: + boot[i] = 'a'; + break; + case VIR_DOMAIN_BOOT_CDROM: + boot[i] = 'd'; + break; + case VIR_DOMAIN_BOOT_NET: + boot[i] = 'n'; + break; + case VIR_DOMAIN_BOOT_DISK: + default: + boot[i] = 'c'; + break; + } + } + + if (!def->os.nBootDevs) { + boot[0] = 'c'; + boot[1] = '\0'; + } else { + boot[def->os.nBootDevs] = '\0'; + } + + if (xenConfigSetString(conf, "boot", boot) < 0) + return -1; + + /* XXX floppy disks */ + } else { + if (def->os.bootloader && + xenConfigSetString(conf, "bootloader", def->os.bootloader) < 0) + return -1; + + if (def->os.bootloaderArgs && + xenConfigSetString(conf, "bootargs", def->os.bootloaderArgs) < 0) + return -1; + + if (def->os.kernel && + xenConfigSetString(conf, "kernel", def->os.kernel) < 0) + return -1; + + if (def->os.initrd && + xenConfigSetString(conf, "ramdisk", def->os.initrd) < 0) + return -1; + + if (def->os.cmdline && + xenConfigSetString(conf, "extra", def->os.cmdline) < 0) + return -1; + } /* !hvm */ + + return 0; +} + + +static int xenFormatXLDisk(virConfValuePtr list, virDomainDiskDefPtr disk) { virBuffer buf = VIR_BUFFER_INITIALIZER; @@ -624,6 +762,9 @@ xenFormatXL(virDomainDefPtr def, virConnectPtr conn, int xendConfigVersion) if (xenFormatConfigCommon(conf, def, conn, xendConfigVersion) < 0) goto cleanup; + if (xenFormatXLOS(conf, def) < 0) + goto cleanup; + if (xenFormatXLDomainDisks(conf, def) < 0) goto cleanup; diff --git a/src/xenconfig/xen_xm.c b/src/xenconfig/xen_xm.c index 5d70af6..410cb1b 100644 --- a/src/xenconfig/xen_xm.c +++ b/src/xenconfig/xen_xm.c @@ -38,6 +38,72 @@ static int +xenParseXMOS(virConfPtr conf, virDomainDefPtr def) +{ + size_t i; + + if (STREQ(def->os.type, "hvm")) { + const char *boot; + + if (VIR_ALLOC(def->os.loader) < 0 || + xenConfigCopyString(conf, "kernel", &def->os.loader->path) < 0) + return -1; + + if (xenConfigGetString(conf, "boot", &boot, "c") < 0) + return -1; + + for (i = 0; i < VIR_DOMAIN_BOOT_LAST && boot[i]; i++) { + switch (boot[i]) { + case 'a': + def->os.bootDevs[i] = VIR_DOMAIN_BOOT_FLOPPY; + break; + case 'd': + def->os.bootDevs[i] = VIR_DOMAIN_BOOT_CDROM; + break; + case 'n': + def->os.bootDevs[i] = VIR_DOMAIN_BOOT_NET; + break; + case 'c': + default: + def->os.bootDevs[i] = VIR_DOMAIN_BOOT_DISK; + break; + } + def->os.nBootDevs++; + } + } else { + const char *extra, *root; + + if (xenConfigCopyStringOpt(conf, "bootloader", &def->os.bootloader) < 0) + return -1; + if (xenConfigCopyStringOpt(conf, "bootargs", &def->os.bootloaderArgs) < 0) + return -1; + + if (xenConfigCopyStringOpt(conf, "kernel", &def->os.kernel) < 0) + return -1; + + if (xenConfigCopyStringOpt(conf, "ramdisk", &def->os.initrd) < 0) + return -1; + + if (xenConfigGetString(conf, "extra", &extra, NULL) < 0) + return -1; + + if (xenConfigGetString(conf, "root", &root, NULL) < 0) + return -1; + + if (root) { + if (virAsprintf(&def->os.cmdline, "root=%s %s", root, extra) < 0) + return -1; + } else { + if (VIR_STRDUP(def->os.cmdline, extra) < 0) + return -1; + } + } + + return 0; +} + + +static int xenParseXMDisk(virConfPtr conf, virDomainDefPtr def, int xendConfigVersion) { const char *str = NULL; @@ -416,6 +482,9 @@ xenParseXM(virConfPtr conf, if (xenParseConfigCommon(conf, def, caps, xendConfigVersion) < 0) goto cleanup; + if (xenParseXMOS(conf, def) < 0) + goto cleanup; + if (xenParseXMDisk(conf, def, xendConfigVersion) < 0) goto cleanup; @@ -430,6 +499,75 @@ xenParseXM(virConfPtr conf, } static int +xenFormatXMOS(virConfPtr conf, virDomainDefPtr def) +{ + size_t i; + + if (STREQ(def->os.type, "hvm")) { + char boot[VIR_DOMAIN_BOOT_LAST+1]; + if (xenConfigSetString(conf, "builder", "hvm") < 0) + return -1; + + if (def->os.loader && def->os.loader->path && + xenConfigSetString(conf, "kernel", def->os.loader->path) < 0) + return -1; + + for (i = 0; i < def->os.nBootDevs; i++) { + switch (def->os.bootDevs[i]) { + case VIR_DOMAIN_BOOT_FLOPPY: + boot[i] = 'a'; + break; + case VIR_DOMAIN_BOOT_CDROM: + boot[i] = 'd'; + break; + case VIR_DOMAIN_BOOT_NET: + boot[i] = 'n'; + break; + case VIR_DOMAIN_BOOT_DISK: + default: + boot[i] = 'c'; + break; + } + } + + if (!def->os.nBootDevs) { + boot[0] = 'c'; + boot[1] = '\0'; + } else { + boot[def->os.nBootDevs] = '\0'; + } + + if (xenConfigSetString(conf, "boot", boot) < 0) + return -1; + + /* XXX floppy disks */ + } else { + if (def->os.bootloader && + xenConfigSetString(conf, "bootloader", def->os.bootloader) < 0) + return -1; + + if (def->os.bootloaderArgs && + xenConfigSetString(conf, "bootargs", def->os.bootloaderArgs) < 0) + return -1; + + if (def->os.kernel && + xenConfigSetString(conf, "kernel", def->os.kernel) < 0) + return -1; + + if (def->os.initrd && + xenConfigSetString(conf, "ramdisk", def->os.initrd) < 0) + return -1; + + if (def->os.cmdline && + xenConfigSetString(conf, "extra", def->os.cmdline) < 0) + return -1; + } /* !hvm */ + + return 0; +} + + +static int xenFormatXMInputDevs(virConfPtr conf, virDomainDefPtr def) { size_t i; @@ -484,6 +622,9 @@ xenFormatXM(virConnectPtr conn, if (xenFormatConfigCommon(conf, def, conn, xendConfigVersion) < 0) goto cleanup; + if (xenFormatXMOS(conf, def) < 0) + goto cleanup; + if (xenFormatXMDisks(conf, def, xendConfigVersion) < 0) goto cleanup; diff --git a/tests/xlconfigdata/test-fullvirt-multiusb.cfg b/tests/xlconfigdata/test-fullvirt-multiusb.cfg index ba4bf52..b9e1b0a 100755 --- a/tests/xlconfigdata/test-fullvirt-multiusb.cfg +++ b/tests/xlconfigdata/test-fullvirt-multiusb.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -24,6 +21,9 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "/dev/HostVG/XenGuest2,raw,hda,w,backendtype=phy", "/root/boot.iso,raw,hdc,r,backendtype=qdisk,devtype=cdrom" ] usb = 1 usbdevice = [ "mouse", "tablet" ] diff --git a/tests/xlconfigdata/test-new-disk.cfg b/tests/xlconfigdata/test-new-disk.cfg index b672b4a..180ce92 100644 --- a/tests/xlconfigdata/test-new-disk.cfg +++ b/tests/xlconfigdata/test-new-disk.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -23,4 +20,7 @@ vnclisten = "127.0.0.1" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "/dev/HostVG/XenGuest2,raw,hda,w,backendtype=phy", "/var/lib/libvirt/images/XenGuest2-home,qcow2,hdb,w,backendtype=qdisk", "/root/boot.iso,raw,hdc,r,backendtype=qdisk,devtype=cdrom" ] diff --git a/tests/xlconfigdata/test-spice.cfg b/tests/xlconfigdata/test-spice.cfg index 49aff63..a97cd20 100644 --- a/tests/xlconfigdata/test-spice.cfg +++ b/tests/xlconfigdata/test-spice.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -19,6 +16,9 @@ device_model = "/usr/lib/xen/bin/qemu-dm" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "/dev/HostVG/XenGuest2,raw,hda,w,backendtype=phy", "/root/boot.iso,raw,hdc,r,backendtype=qdisk,devtype=cdrom" ] sdl = 0 vnc = 0 diff --git a/tests/xmconfigdata/test-escape-paths.cfg b/tests/xmconfigdata/test-escape-paths.cfg index 101750c..64c9eed 100644 --- a/tests/xmconfigdata/test-escape-paths.cfg +++ b/tests/xmconfigdata/test-escape-paths.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader&test" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -23,4 +20,7 @@ vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type= parallel = "none" serial = "none" soundhw = "sb16,es1370" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader&test" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", """phy:/dev/HostVG/XenGuest'",hdb,w""", "file:/root/boot.iso&test,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-force-hpet.cfg b/tests/xmconfigdata/test-fullvirt-force-hpet.cfg index 97a9827..0bd76d3 100644 --- a/tests/xmconfigdata/test-fullvirt-force-hpet.cfg +++ b/tests/xmconfigdata/test-fullvirt-force-hpet.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -23,4 +20,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-force-nohpet.cfg b/tests/xmconfigdata/test-fullvirt-force-nohpet.cfg index bcd396a..a4c2fa0 100644 --- a/tests/xmconfigdata/test-fullvirt-force-nohpet.cfg +++ b/tests/xmconfigdata/test-fullvirt-force-nohpet.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -23,4 +20,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-localtime.cfg b/tests/xmconfigdata/test-fullvirt-localtime.cfg index 561c7c6..38c558b 100755 --- a/tests/xmconfigdata/test-fullvirt-localtime.cfg +++ b/tests/xmconfigdata/test-fullvirt-localtime.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-net-ioemu.cfg b/tests/xmconfigdata/test-fullvirt-net-ioemu.cfg index bd7ab8f..722f021 100644 --- a/tests/xmconfigdata/test-fullvirt-net-ioemu.cfg +++ b/tests/xmconfigdata/test-fullvirt-net-ioemu.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-net-netfront.cfg b/tests/xmconfigdata/test-fullvirt-net-netfront.cfg index aa81ce7..21d81be 100644 --- a/tests/xmconfigdata/test-fullvirt-net-netfront.cfg +++ b/tests/xmconfigdata/test-fullvirt-net-netfront.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,type=netfront" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-new-cdrom.cfg b/tests/xmconfigdata/test-fullvirt-new-cdrom.cfg index bd7ab8f..722f021 100755 --- a/tests/xmconfigdata/test-fullvirt-new-cdrom.cfg +++ b/tests/xmconfigdata/test-fullvirt-new-cdrom.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-old-cdrom.cfg b/tests/xmconfigdata/test-fullvirt-old-cdrom.cfg index 1e7db00..5c8b47b 100755 --- a/tests/xmconfigdata/test-fullvirt-old-cdrom.cfg +++ b/tests/xmconfigdata/test-fullvirt-old-cdrom.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -23,4 +20,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr0,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,ioemu:hda,w" ] diff --git a/tests/xmconfigdata/test-fullvirt-parallel-tcp.cfg b/tests/xmconfigdata/test-fullvirt-parallel-tcp.cfg index 7c6ffc9..0d999ad 100755 --- a/tests/xmconfigdata/test-fullvirt-parallel-tcp.cfg +++ b/tests/xmconfigdata/test-fullvirt-parallel-tcp.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "tcp:127.0.0.1:7777" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-serial-dev-2-ports.cfg b/tests/xmconfigdata/test-fullvirt-serial-dev-2-ports.cfg index 13a368b..f0fb178 100644 --- a/tests/xmconfigdata/test-fullvirt-serial-dev-2-ports.cfg +++ b/tests/xmconfigdata/test-fullvirt-serial-dev-2-ports.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = [ "/dev/ttyS0", "/dev/ttyS1" ] +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-serial-dev-2nd-port.cfg b/tests/xmconfigdata/test-fullvirt-serial-dev-2nd-port.cfg index dcd5bd6..b2cb1ea 100644 --- a/tests/xmconfigdata/test-fullvirt-serial-dev-2nd-port.cfg +++ b/tests/xmconfigdata/test-fullvirt-serial-dev-2nd-port.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = [ "none", "/dev/ttyS1" ] +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-serial-file.cfg b/tests/xmconfigdata/test-fullvirt-serial-file.cfg index db60bb9..65c09e8 100755 --- a/tests/xmconfigdata/test-fullvirt-serial-file.cfg +++ b/tests/xmconfigdata/test-fullvirt-serial-file.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "file:/tmp/serial.log" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-serial-null.cfg b/tests/xmconfigdata/test-fullvirt-serial-null.cfg index b3e7c6f..4c83216 100755 --- a/tests/xmconfigdata/test-fullvirt-serial-null.cfg +++ b/tests/xmconfigdata/test-fullvirt-serial-null.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "null" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-serial-pipe.cfg b/tests/xmconfigdata/test-fullvirt-serial-pipe.cfg index fbc48bc..09bfd3b 100755 --- a/tests/xmconfigdata/test-fullvirt-serial-pipe.cfg +++ b/tests/xmconfigdata/test-fullvirt-serial-pipe.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "pipe:/tmp/serial.pipe" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-serial-pty.cfg b/tests/xmconfigdata/test-fullvirt-serial-pty.cfg index b9e87a1..e5d7c93 100755 --- a/tests/xmconfigdata/test-fullvirt-serial-pty.cfg +++ b/tests/xmconfigdata/test-fullvirt-serial-pty.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "pty" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-serial-stdio.cfg b/tests/xmconfigdata/test-fullvirt-serial-stdio.cfg index 6a6442c..5f5628c 100755 --- a/tests/xmconfigdata/test-fullvirt-serial-stdio.cfg +++ b/tests/xmconfigdata/test-fullvirt-serial-stdio.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "stdio" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.cfg b/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.cfg index b94a1c5..e28b97b 100755 --- a/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.cfg +++ b/tests/xmconfigdata/test-fullvirt-serial-tcp-telnet.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "telnet:127.0.0.1:9999,server,nowait" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-serial-tcp.cfg b/tests/xmconfigdata/test-fullvirt-serial-tcp.cfg index d73839d..64b709d 100755 --- a/tests/xmconfigdata/test-fullvirt-serial-tcp.cfg +++ b/tests/xmconfigdata/test-fullvirt-serial-tcp.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "tcp:127.0.0.1:7777" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-serial-udp.cfg b/tests/xmconfigdata/test-fullvirt-serial-udp.cfg index 55d0034..acf594d 100755 --- a/tests/xmconfigdata/test-fullvirt-serial-udp.cfg +++ b/tests/xmconfigdata/test-fullvirt-serial-udp.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "udp:127.0.0.1:9999@0.0.0.0:99998" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-serial-unix.cfg b/tests/xmconfigdata/test-fullvirt-serial-unix.cfg index d6eeb0c..1b7da43 100755 --- a/tests/xmconfigdata/test-fullvirt-serial-unix.cfg +++ b/tests/xmconfigdata/test-fullvirt-serial-unix.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "unix:/tmp/serial.sock,server,nowait" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-sound.cfg b/tests/xmconfigdata/test-fullvirt-sound.cfg index cd7cb1e..c621fb1 100644 --- a/tests/xmconfigdata/test-fullvirt-sound.cfg +++ b/tests/xmconfigdata/test-fullvirt-sound.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -23,4 +20,7 @@ vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type= parallel = "none" serial = "none" soundhw = "sb16,es1370" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-fullvirt-usbmouse.cfg b/tests/xmconfigdata/test-fullvirt-usbmouse.cfg index 7b252cf..c8004e7 100755 --- a/tests/xmconfigdata/test-fullvirt-usbmouse.cfg +++ b/tests/xmconfigdata/test-fullvirt-usbmouse.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,6 +19,9 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] usb = 1 usbdevice = "mouse" diff --git a/tests/xmconfigdata/test-fullvirt-usbtablet.cfg b/tests/xmconfigdata/test-fullvirt-usbtablet.cfg index 7e6cd36..4f2417b 100755 --- a/tests/xmconfigdata/test-fullvirt-usbtablet.cfg +++ b/tests/xmconfigdata/test-fullvirt-usbtablet.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,6 +19,9 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] usb = 1 usbdevice = "tablet" diff --git a/tests/xmconfigdata/test-fullvirt-utc.cfg b/tests/xmconfigdata/test-fullvirt-utc.cfg index bd7ab8f..722f021 100755 --- a/tests/xmconfigdata/test-fullvirt-utc.cfg +++ b/tests/xmconfigdata/test-fullvirt-utc.cfg @@ -3,9 +3,6 @@ uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "d" pae = 1 acpi = 1 apic = 1 @@ -22,4 +19,7 @@ vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "none" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "d" disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-no-source-cdrom.cfg b/tests/xmconfigdata/test-no-source-cdrom.cfg index c778015..8d00618 100644 --- a/tests/xmconfigdata/test-no-source-cdrom.cfg +++ b/tests/xmconfigdata/test-no-source-cdrom.cfg @@ -3,9 +3,6 @@ uuid = "cc2315e7-d26a-307a-438c-6d188ec4c09c" maxmem = 382 memory = 350 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "c" pae = 1 acpi = 1 apic = 1 @@ -20,4 +17,7 @@ vncunused = 1 vif = [ "mac=00:16:3e:0a:7b:39,bridge=xenbr0,script=vif-bridge,model=e1000,type=ioemu" ] parallel = "none" serial = "pty" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "c" disk = [ "phy:/dev/sda8,hda,w", ",hdc:cdrom,r" ] diff --git a/tests/xmconfigdata/test-paravirt-net-e1000.cfg b/tests/xmconfigdata/test-paravirt-net-e1000.cfg index ac43507..4481d7b 100755 --- a/tests/xmconfigdata/test-paravirt-net-e1000.cfg +++ b/tests/xmconfigdata/test-paravirt-net-e1000.cfg @@ -3,11 +3,11 @@ uuid = "c7a5fdb0-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -bootloader = "/usr/bin/pygrub" localtime = 0 on_poweroff = "destroy" on_reboot = "restart" on_crash = "restart" vfb = [ "type=vnc,vncunused=1,vnclisten=127.0.0.1,vncpasswd=123poi" ] vif = [ "mac=00:16:3e:66:94:9c,bridge=br0,script=vif-bridge,model=e1000" ] +bootloader = "/usr/bin/pygrub" disk = [ "phy:/dev/HostVG/XenGuest1,xvda,w" ] diff --git a/tests/xmconfigdata/test-paravirt-net-vifname.cfg b/tests/xmconfigdata/test-paravirt-net-vifname.cfg index c66721c..35cd7ac 100644 --- a/tests/xmconfigdata/test-paravirt-net-vifname.cfg +++ b/tests/xmconfigdata/test-paravirt-net-vifname.cfg @@ -3,11 +3,11 @@ uuid = "c7a5fdb0-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -bootloader = "/usr/bin/pygrub" localtime = 0 on_poweroff = "destroy" on_reboot = "restart" on_crash = "restart" vfb = [ "type=vnc,vncunused=1,vnclisten=127.0.0.1,vncpasswd=123poi" ] vif = [ "mac=00:16:3e:66:94:9c,bridge=br0,script=vif-bridge,model=e1000,vifname=net0" ] +bootloader = "/usr/bin/pygrub" disk = [ "phy:/dev/HostVG/XenGuest1,xvda,w" ] diff --git a/tests/xmconfigdata/test-paravirt-new-pvfb-vncdisplay.cfg b/tests/xmconfigdata/test-paravirt-new-pvfb-vncdisplay.cfg index de1c912..d15035b 100644 --- a/tests/xmconfigdata/test-paravirt-new-pvfb-vncdisplay.cfg +++ b/tests/xmconfigdata/test-paravirt-new-pvfb-vncdisplay.cfg @@ -3,11 +3,11 @@ uuid = "c7a5fdb0-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -bootloader = "/usr/bin/pygrub" localtime = 0 on_poweroff = "destroy" on_reboot = "restart" on_crash = "restart" vfb = [ "type=vnc,vncunused=0,vncdisplay=25,vnclisten=127.0.0.1,vncpasswd=123poi" ] vif = [ "mac=00:16:3e:66:94:9c,bridge=br0,script=vif-bridge" ] +bootloader = "/usr/bin/pygrub" disk = [ "phy:/dev/HostVG/XenGuest1,xvda,w" ] diff --git a/tests/xmconfigdata/test-paravirt-new-pvfb.cfg b/tests/xmconfigdata/test-paravirt-new-pvfb.cfg index df91e89..d564723 100755 --- a/tests/xmconfigdata/test-paravirt-new-pvfb.cfg +++ b/tests/xmconfigdata/test-paravirt-new-pvfb.cfg @@ -3,11 +3,11 @@ uuid = "c7a5fdb0-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -bootloader = "/usr/bin/pygrub" localtime = 0 on_poweroff = "destroy" on_reboot = "restart" on_crash = "restart" vfb = [ "type=vnc,vncunused=1,vnclisten=127.0.0.1,vncpasswd=123poi" ] vif = [ "mac=00:16:3e:66:94:9c,bridge=br0,script=vif-bridge" ] +bootloader = "/usr/bin/pygrub" disk = [ "phy:/dev/HostVG/XenGuest1,xvda,w" ] diff --git a/tests/xmconfigdata/test-paravirt-old-pvfb-vncdisplay.cfg b/tests/xmconfigdata/test-paravirt-old-pvfb-vncdisplay.cfg index 6f9a1aa..94c01ed 100644 --- a/tests/xmconfigdata/test-paravirt-old-pvfb-vncdisplay.cfg +++ b/tests/xmconfigdata/test-paravirt-old-pvfb-vncdisplay.cfg @@ -3,7 +3,6 @@ uuid = "c7a5fdb0-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -bootloader = "/usr/bin/pygrub" localtime = 0 on_poweroff = "destroy" on_reboot = "restart" @@ -15,4 +14,5 @@ vncdisplay = 25 vnclisten = "127.0.0.1" vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:94:9c,bridge=br0,script=vif-bridge" ] +bootloader = "/usr/bin/pygrub" disk = [ "phy:/dev/HostVG/XenGuest1,xvda,w" ] diff --git a/tests/xmconfigdata/test-paravirt-old-pvfb.cfg b/tests/xmconfigdata/test-paravirt-old-pvfb.cfg index 7daad8c..9f11f5b 100755 --- a/tests/xmconfigdata/test-paravirt-old-pvfb.cfg +++ b/tests/xmconfigdata/test-paravirt-old-pvfb.cfg @@ -3,7 +3,6 @@ uuid = "c7a5fdb0-cdaf-9455-926a-d65c16db1809" maxmem = 579 memory = 394 vcpus = 1 -bootloader = "/usr/bin/pygrub" localtime = 0 on_poweroff = "destroy" on_reboot = "restart" @@ -14,4 +13,5 @@ vncunused = 1 vnclisten = "127.0.0.1" vncpasswd = "123poi" vif = [ "mac=00:16:3e:66:94:9c,bridge=br0,script=vif-bridge" ] +bootloader = "/usr/bin/pygrub" disk = [ "phy:/dev/HostVG/XenGuest1,xvda,w" ] diff --git a/tests/xmconfigdata/test-paravirt-vcpu.cfg b/tests/xmconfigdata/test-paravirt-vcpu.cfg index fb89bf9..1e7765d 100644 --- a/tests/xmconfigdata/test-paravirt-vcpu.cfg +++ b/tests/xmconfigdata/test-paravirt-vcpu.cfg @@ -4,10 +4,10 @@ maxmem = 579 memory = 394 vcpus = 4 vcpu_avail = 3 -bootloader = "/usr/bin/pygrub" localtime = 0 on_poweroff = "destroy" on_reboot = "restart" on_crash = "restart" vif = [ "mac=00:16:3e:66:94:9c,bridge=br0,script=vif-bridge" ] +bootloader = "/usr/bin/pygrub" disk = [ "phy:/dev/HostVG/XenGuest1,xvda,w" ] diff --git a/tests/xmconfigdata/test-pci-devs.cfg b/tests/xmconfigdata/test-pci-devs.cfg index d70066f..a90dd94 100644 --- a/tests/xmconfigdata/test-pci-devs.cfg +++ b/tests/xmconfigdata/test-pci-devs.cfg @@ -3,9 +3,6 @@ uuid = "cc2315e7-d26a-307a-438c-6d188ec4c09c" maxmem = 382 memory = 350 vcpus = 1 -builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" -boot = "c" pae = 1 acpi = 1 apic = 1 @@ -21,4 +18,7 @@ vif = [ "mac=00:16:3e:0a:7b:39,bridge=xenbr0,script=vif-bridge,model=e1000,type= pci = [ "0001:0c:1b.2", "0000:01:13.0" ] parallel = "none" serial = "pty" +builder = "hvm" +kernel = "/usr/lib/xen/boot/hvmloader" +boot = "c" disk = [ "phy:/dev/sda8,hda,w", ",hdc:cdrom,r" ] -- 1.8.4.5

In xl config, hvmloader is implied for hvm guests. It is not specified with the "kernel" option like xm config. The "kernel" option, along with "ramdisk" and "extra", is used for HVM direct kernel boot. Instead of using "kernel" option to populate virDomainDef object's os.loader->path, use hvmloader discovered when gathering capabilities. This change required fixing initialization of capabilities in the test utils and removing 'kernel = "/usr/lib/xen/boot/hvmloader"' from the test config files. Signed-off-by: Jim Fehlig <jfehlig@suse.com> --- src/xenconfig/xen_xl.c | 20 +++++++++++--------- tests/testutilsxen.c | 8 +++++--- tests/xlconfigdata/test-fullvirt-multiusb.cfg | 1 - tests/xlconfigdata/test-new-disk.cfg | 1 - tests/xlconfigdata/test-spice.cfg | 1 - 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c index 1af162a..12050f3 100644 --- a/src/xenconfig/xen_xl.c +++ b/src/xenconfig/xen_xl.c @@ -59,16 +59,22 @@ extern int xlu_disk_parse(XLU_Config *cfg, #endif static int -xenParseXLOS(virConfPtr conf, virDomainDefPtr def) +xenParseXLOS(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps) { size_t i; if (STREQ(def->os.type, "hvm")) { const char *boot; - if (VIR_ALLOC(def->os.loader) < 0 || - xenConfigCopyString(conf, "kernel", &def->os.loader->path) < 0) - return -1; + for (i = 0; i < caps->nguests; i++) { + if (STREQ(caps->guests[i]->ostype, "hvm") && + caps->guests[i]->arch.id == def->os.arch) { + if (VIR_ALLOC(def->os.loader) < 0 || + VIR_STRDUP(def->os.loader->path, + caps->guests[i]->arch.defaultInfo.loader) < 0) + return -1; + } + } if (xenConfigGetString(conf, "boot", &boot, "c") < 0) return -1; @@ -423,7 +429,7 @@ xenParseXL(virConfPtr conf, virCapsPtr caps, int xendConfigVersion) if (xenParseConfigCommon(conf, def, caps, xendConfigVersion) < 0) goto cleanup; - if (xenParseXLOS(conf, def) < 0) + if (xenParseXLOS(conf, def, caps) < 0) goto cleanup; if (xenParseXLDisk(conf, def) < 0) @@ -453,10 +459,6 @@ xenFormatXLOS(virConfPtr conf, virDomainDefPtr def) if (xenConfigSetString(conf, "builder", "hvm") < 0) return -1; - if (def->os.loader && def->os.loader->path && - xenConfigSetString(conf, "kernel", def->os.loader->path) < 0) - return -1; - for (i = 0; i < def->os.nBootDevs; i++) { switch (def->os.bootDevs[i]) { case VIR_DOMAIN_BOOT_FLOPPY: diff --git a/tests/testutilsxen.c b/tests/testutilsxen.c index df1d124..c60e324 100644 --- a/tests/testutilsxen.c +++ b/tests/testutilsxen.c @@ -92,7 +92,8 @@ testXLInitCaps(void) if ((machines = virCapabilitiesAllocMachines(x86_machines, nmachines)) == NULL) goto cleanup; if ((guest = virCapabilitiesAddGuest(caps, "hvm", VIR_ARCH_X86_64, - "/usr/lib/xen/bin/qemu-dm", NULL, + "/usr/lib/xen/bin/qemu-system-i386", + "/usr/lib/xen/boot/hvmloader", nmachines, machines)) == NULL) goto cleanup; machines = NULL; @@ -104,8 +105,9 @@ testXLInitCaps(void) goto cleanup; if ((guest = virCapabilitiesAddGuest(caps, "xen", VIR_ARCH_X86_64, - "/usr/lib/xen/bin/qemu-dm", NULL, - nmachines, machines)) == NULL) + "/usr/lib/xen/bin/qemu-system-i386", + NULL, + nmachines, machines)) == NULL) goto cleanup; machines = NULL; diff --git a/tests/xlconfigdata/test-fullvirt-multiusb.cfg b/tests/xlconfigdata/test-fullvirt-multiusb.cfg index b9e1b0a..68a2614 100755 --- a/tests/xlconfigdata/test-fullvirt-multiusb.cfg +++ b/tests/xlconfigdata/test-fullvirt-multiusb.cfg @@ -22,7 +22,6 @@ vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type= parallel = "none" serial = "none" builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" boot = "d" disk = [ "/dev/HostVG/XenGuest2,raw,hda,w,backendtype=phy", "/root/boot.iso,raw,hdc,r,backendtype=qdisk,devtype=cdrom" ] usb = 1 diff --git a/tests/xlconfigdata/test-new-disk.cfg b/tests/xlconfigdata/test-new-disk.cfg index 180ce92..9e9f106 100644 --- a/tests/xlconfigdata/test-new-disk.cfg +++ b/tests/xlconfigdata/test-new-disk.cfg @@ -21,6 +21,5 @@ vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type= parallel = "none" serial = "none" builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" boot = "d" disk = [ "/dev/HostVG/XenGuest2,raw,hda,w,backendtype=phy", "/var/lib/libvirt/images/XenGuest2-home,qcow2,hdb,w,backendtype=qdisk", "/root/boot.iso,raw,hdc,r,backendtype=qdisk,devtype=cdrom" ] diff --git a/tests/xlconfigdata/test-spice.cfg b/tests/xlconfigdata/test-spice.cfg index a97cd20..21f0e55 100644 --- a/tests/xlconfigdata/test-spice.cfg +++ b/tests/xlconfigdata/test-spice.cfg @@ -17,7 +17,6 @@ vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type= parallel = "none" serial = "none" builder = "hvm" -kernel = "/usr/lib/xen/boot/hvmloader" boot = "d" disk = [ "/dev/HostVG/XenGuest2,raw,hda,w,backendtype=phy", "/root/boot.iso,raw,hdc,r,backendtype=qdisk,devtype=cdrom" ] sdl = 0 -- 1.8.4.5

Add support for HVM direct kernel boot in libxl. Also add a test to verify domXML <-> native conversions. Signed-off-by: Chunyan Liu <cyliu@suse.com> Signed-off-by: Jim Fehlig <jfehlig@suse.com> --- src/libxl/libxl_conf.c | 9 ++++ src/xenconfig/xen_xl.c | 39 ++++++++++++++++- .../test-fullvirt-direct-kernel-boot.cfg | 29 +++++++++++++ .../test-fullvirt-direct-kernel-boot.xml | 49 ++++++++++++++++++++++ tests/xlconfigtest.c | 3 ++ 5 files changed, 127 insertions(+), 2 deletions(-) diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 9b3c949..230daec 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -702,6 +702,15 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, if (VIR_STRDUP(b_info->u.hvm.boot, bootorder) < 0) return -1; +#ifdef LIBXL_HAVE_BUILDINFO_KERNEL + if (VIR_STRDUP(b_info->cmdline, def->os.cmdline) < 0) + return -1; + if (VIR_STRDUP(b_info->kernel, def->os.kernel) < 0) + return -1; + if (VIR_STRDUP(b_info->ramdisk, def->os.initrd) < 0) + return -1; +#endif + if (def->emulator) { if (!virFileExists(def->emulator)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c index 12050f3..b572587 100644 --- a/src/xenconfig/xen_xl.c +++ b/src/xenconfig/xen_xl.c @@ -62,6 +62,7 @@ static int xenParseXLOS(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps) { size_t i; + const char *extra, *root; if (STREQ(def->os.type, "hvm")) { const char *boot; @@ -76,6 +77,28 @@ xenParseXLOS(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps) } } +#ifdef LIBXL_HAVE_BUILDINFO_KERNEL + if (xenConfigCopyStringOpt(conf, "kernel", &def->os.kernel) < 0) + return -1; + + if (xenConfigCopyStringOpt(conf, "ramdisk", &def->os.initrd) < 0) + return -1; + + if (xenConfigGetString(conf, "extra", &extra, NULL) < 0) + return -1; + + if (xenConfigGetString(conf, "root", &root, NULL) < 0) + return -1; + + if (root) { + if (virAsprintf(&def->os.cmdline, "root=%s %s", root, extra) < 0) + return -1; + } else { + if (VIR_STRDUP(def->os.cmdline, extra) < 0) + return -1; + } +#endif + if (xenConfigGetString(conf, "boot", &boot, "c") < 0) return -1; @@ -98,8 +121,6 @@ xenParseXLOS(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps) def->os.nBootDevs++; } } else { - const char *extra, *root; - if (xenConfigCopyStringOpt(conf, "bootloader", &def->os.bootloader) < 0) return -1; if (xenConfigCopyStringOpt(conf, "bootargs", &def->os.bootloaderArgs) < 0) @@ -459,6 +480,20 @@ xenFormatXLOS(virConfPtr conf, virDomainDefPtr def) if (xenConfigSetString(conf, "builder", "hvm") < 0) return -1; +#ifdef LIBXL_HAVE_BUILDINFO_KERNEL + if (def->os.kernel && + xenConfigSetString(conf, "kernel", def->os.kernel) < 0) + return -1; + + if (def->os.initrd && + xenConfigSetString(conf, "ramdisk", def->os.initrd) < 0) + return -1; + + if (def->os.cmdline && + xenConfigSetString(conf, "extra", def->os.cmdline) < 0) + return -1; +#endif + for (i = 0; i < def->os.nBootDevs; i++) { switch (def->os.bootDevs[i]) { case VIR_DOMAIN_BOOT_FLOPPY: diff --git a/tests/xlconfigdata/test-fullvirt-direct-kernel-boot.cfg b/tests/xlconfigdata/test-fullvirt-direct-kernel-boot.cfg new file mode 100644 index 0000000..1fac3a5 --- /dev/null +++ b/tests/xlconfigdata/test-fullvirt-direct-kernel-boot.cfg @@ -0,0 +1,29 @@ +name = "XenGuest2" +uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809" +maxmem = 579 +memory = 394 +vcpus = 1 +pae = 1 +acpi = 1 +apic = 1 +hap = 0 +viridian = 0 +localtime = 0 +on_poweroff = "destroy" +on_reboot = "restart" +on_crash = "restart" +device_model = "/usr/lib/xen/bin/qemu-system-i386" +sdl = 0 +vnc = 1 +vncunused = 1 +vnclisten = "127.0.0.1" +vncpasswd = "123poi" +vif = [ "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu" ] +parallel = "none" +serial = "none" +builder = "hvm" +kernel = "/tmp/vmlinuz" +ramdisk = "/tmp/initrd" +extra = "ignore_loglvl" +boot = "d" +disk = [ "/dev/HostVG/XenGuest2,raw,hda,w,backendtype=phy", "/root/boot.iso,raw,hdc,r,backendtype=qdisk,devtype=cdrom" ] diff --git a/tests/xlconfigdata/test-fullvirt-direct-kernel-boot.xml b/tests/xlconfigdata/test-fullvirt-direct-kernel-boot.xml new file mode 100644 index 0000000..414f645 --- /dev/null +++ b/tests/xlconfigdata/test-fullvirt-direct-kernel-boot.xml @@ -0,0 +1,49 @@ +<domain type='xen'> + <name>XenGuest2</name> + <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>592896</memory> + <currentMemory unit='KiB'>403456</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='xenfv'>hvm</type> + <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader> + <kernel>/tmp/vmlinuz</kernel> + <initrd>/tmp/initrd</initrd> + <cmdline>ignore_loglvl</cmdline> + <boot dev='cdrom'/> + </os> + <features> + <acpi/> + <apic/> + <pae/> + </features> + <clock offset='utc' adjustment='reset'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>restart</on_crash> + <devices> + <emulator>/usr/lib/xen/bin/qemu-system-i386</emulator> + <disk type='block' device='disk'> + <driver name='phy' type='raw'/> + <source dev='/dev/HostVG/XenGuest2'/> + <target dev='hda' bus='ide'/> + </disk> + <disk type='file' device='cdrom'> + <driver name='qemu' type='raw'/> + <source file='/root/boot.iso'/> + <target dev='hdc' bus='ide'/> + <readonly/> + </disk> + <interface type='bridge'> + <mac address='00:16:3e:66:92:9c'/> + <source bridge='xenbr1'/> + <script path='vif-bridge'/> + <model type='e1000'/> + </interface> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1' passwd='123poi'> + <listen type='address' address='127.0.0.1'/> + </graphics> + </devices> +</domain> diff --git a/tests/xlconfigtest.c b/tests/xlconfigtest.c index 6d4aa6d..e8b4aa9 100644 --- a/tests/xlconfigtest.c +++ b/tests/xlconfigtest.c @@ -216,6 +216,9 @@ mymain(void) DO_TEST("new-disk", 3); DO_TEST("spice", 3); DO_TEST("fullvirt-multiusb", 3); +#ifdef LIBXL_HAVE_BUILDINFO_KERNEL + DO_TEST("fullvirt-direct-kernel-boot", 3); +#endif virObjectUnref(caps); virObjectUnref(xmlopt); -- 1.8.4.5

On 20.03.2015 18:07, Jim Fehlig wrote:
This series was inspired by Marek's and Chunyan's patches to add support for <kernel>, <initrd>, and <cmdline> in Xen HVM domain config
https://www.redhat.com/archives/libvir-list/2015-March/msg00328.html https://www.redhat.com/archives/libvir-list/2014-September/msg01006.html
Patches 1 and 2 are trivial prep for patch 3, which moves parsing and formatting of <os> config out of the common code and into the xl and xm specfic parsing/formatting code. For ease of review, identical copies of xen{Parse,Format}OS are made in xen_{xl,xm}.c. Changes to the xl parsing/formatting functions are made in patch 4 and 5.
Changing the order in which config is parsed/formatted has the unfortunate side affect of requiring corresponding changes to the test config data files. Patch 3 shoulders that burden.
Jim Fehlig (5): xenconfig: export xenConfigCopyString xenconfig: remove redunant parsing of device_model xenconfig: move <os> parsing/formating to config-specific files xenconfig: don't use "kernel" for hvmloader libxl: support HVM direct kernel boot
src/libxl/libxl_conf.c | 9 ++ src/xenconfig/xen_common.c | 146 +---------------- src/xenconfig/xen_common.h | 5 + src/xenconfig/xen_xl.c | 178 +++++++++++++++++++++ src/xenconfig/xen_xm.c | 141 ++++++++++++++++ tests/testutilsxen.c | 8 +- .../test-fullvirt-direct-kernel-boot.cfg | 29 ++++ .../test-fullvirt-direct-kernel-boot.xml | 49 ++++++ tests/xlconfigdata/test-fullvirt-multiusb.cfg | 5 +- tests/xlconfigdata/test-new-disk.cfg | 5 +- tests/xlconfigdata/test-spice.cfg | 5 +- tests/xlconfigtest.c | 3 + tests/xmconfigdata/test-escape-paths.cfg | 6 +- tests/xmconfigdata/test-fullvirt-force-hpet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-force-nohpet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-localtime.cfg | 6 +- tests/xmconfigdata/test-fullvirt-net-ioemu.cfg | 6 +- tests/xmconfigdata/test-fullvirt-net-netfront.cfg | 6 +- tests/xmconfigdata/test-fullvirt-new-cdrom.cfg | 6 +- tests/xmconfigdata/test-fullvirt-old-cdrom.cfg | 6 +- tests/xmconfigdata/test-fullvirt-parallel-tcp.cfg | 6 +- .../test-fullvirt-serial-dev-2-ports.cfg | 6 +- .../test-fullvirt-serial-dev-2nd-port.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-file.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-null.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-pipe.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-pty.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-stdio.cfg | 6 +- .../test-fullvirt-serial-tcp-telnet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-tcp.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-udp.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-unix.cfg | 6 +- tests/xmconfigdata/test-fullvirt-sound.cfg | 6 +- tests/xmconfigdata/test-fullvirt-usbmouse.cfg | 6 +- tests/xmconfigdata/test-fullvirt-usbtablet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-utc.cfg | 6 +- tests/xmconfigdata/test-no-source-cdrom.cfg | 6 +- tests/xmconfigdata/test-paravirt-net-e1000.cfg | 2 +- tests/xmconfigdata/test-paravirt-net-vifname.cfg | 2 +- .../test-paravirt-new-pvfb-vncdisplay.cfg | 2 +- tests/xmconfigdata/test-paravirt-new-pvfb.cfg | 2 +- .../test-paravirt-old-pvfb-vncdisplay.cfg | 2 +- tests/xmconfigdata/test-paravirt-old-pvfb.cfg | 2 +- tests/xmconfigdata/test-paravirt-vcpu.cfg | 2 +- tests/xmconfigdata/test-pci-devs.cfg | 6 +- 45 files changed, 511 insertions(+), 242 deletions(-) create mode 100644 tests/xlconfigdata/test-fullvirt-direct-kernel-boot.cfg create mode 100644 tests/xlconfigdata/test-fullvirt-direct-kernel-boot.xml
ACK although you will have to rebase the last patch. Michal

On 04/09/2015 08:01 AM, Michal Privoznik wrote:
On 20.03.2015 18:07, Jim Fehlig wrote:
This series was inspired by Marek's and Chunyan's patches to add support for <kernel>, <initrd>, and <cmdline> in Xen HVM domain config
https://www.redhat.com/archives/libvir-list/2015-March/msg00328.html https://www.redhat.com/archives/libvir-list/2014-September/msg01006.html
Patches 1 and 2 are trivial prep for patch 3, which moves parsing and formatting of <os> config out of the common code and into the xl and xm specfic parsing/formatting code. For ease of review, identical copies of xen{Parse,Format}OS are made in xen_{xl,xm}.c. Changes to the xl parsing/formatting functions are made in patch 4 and 5.
Changing the order in which config is parsed/formatted has the unfortunate side affect of requiring corresponding changes to the test config data files. Patch 3 shoulders that burden.
Jim Fehlig (5): xenconfig: export xenConfigCopyString xenconfig: remove redunant parsing of device_model xenconfig: move <os> parsing/formating to config-specific files xenconfig: don't use "kernel" for hvmloader libxl: support HVM direct kernel boot
src/libxl/libxl_conf.c | 9 ++ src/xenconfig/xen_common.c | 146 +---------------- src/xenconfig/xen_common.h | 5 + src/xenconfig/xen_xl.c | 178 +++++++++++++++++++++ src/xenconfig/xen_xm.c | 141 ++++++++++++++++ tests/testutilsxen.c | 8 +- .../test-fullvirt-direct-kernel-boot.cfg | 29 ++++ .../test-fullvirt-direct-kernel-boot.xml | 49 ++++++ tests/xlconfigdata/test-fullvirt-multiusb.cfg | 5 +- tests/xlconfigdata/test-new-disk.cfg | 5 +- tests/xlconfigdata/test-spice.cfg | 5 +- tests/xlconfigtest.c | 3 + tests/xmconfigdata/test-escape-paths.cfg | 6 +- tests/xmconfigdata/test-fullvirt-force-hpet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-force-nohpet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-localtime.cfg | 6 +- tests/xmconfigdata/test-fullvirt-net-ioemu.cfg | 6 +- tests/xmconfigdata/test-fullvirt-net-netfront.cfg | 6 +- tests/xmconfigdata/test-fullvirt-new-cdrom.cfg | 6 +- tests/xmconfigdata/test-fullvirt-old-cdrom.cfg | 6 +- tests/xmconfigdata/test-fullvirt-parallel-tcp.cfg | 6 +- .../test-fullvirt-serial-dev-2-ports.cfg | 6 +- .../test-fullvirt-serial-dev-2nd-port.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-file.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-null.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-pipe.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-pty.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-stdio.cfg | 6 +- .../test-fullvirt-serial-tcp-telnet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-tcp.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-udp.cfg | 6 +- tests/xmconfigdata/test-fullvirt-serial-unix.cfg | 6 +- tests/xmconfigdata/test-fullvirt-sound.cfg | 6 +- tests/xmconfigdata/test-fullvirt-usbmouse.cfg | 6 +- tests/xmconfigdata/test-fullvirt-usbtablet.cfg | 6 +- tests/xmconfigdata/test-fullvirt-utc.cfg | 6 +- tests/xmconfigdata/test-no-source-cdrom.cfg | 6 +- tests/xmconfigdata/test-paravirt-net-e1000.cfg | 2 +- tests/xmconfigdata/test-paravirt-net-vifname.cfg | 2 +- .../test-paravirt-new-pvfb-vncdisplay.cfg | 2 +- tests/xmconfigdata/test-paravirt-new-pvfb.cfg | 2 +- .../test-paravirt-old-pvfb-vncdisplay.cfg | 2 +- tests/xmconfigdata/test-paravirt-old-pvfb.cfg | 2 +- tests/xmconfigdata/test-paravirt-vcpu.cfg | 2 +- tests/xmconfigdata/test-pci-devs.cfg | 6 +- 45 files changed, 511 insertions(+), 242 deletions(-) create mode 100644 tests/xlconfigdata/test-fullvirt-direct-kernel-boot.cfg create mode 100644 tests/xlconfigdata/test-fullvirt-direct-kernel-boot.xml
ACK although you will have to rebase the last patch.
5/5 rebased and the series is pushed now. Thanks! Regards, Jim
participants (2)
-
Jim Fehlig
-
Michal Privoznik