Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:GA
libvirt.1263
libxl-hvm-kernel-boot.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File libxl-hvm-kernel-boot.patch of Package libvirt.1263
libxl: support hvm direct kernel boot Xen libxl can support Xen HVM direct kernel boot now. To support Xen HVM direct kernel boot in libvirt, it still needs some changes to libvirt code: accept HVM direct kernel boot related configuration in xml, parse those info into virDomainDefPtr, and fill in related parts of libxl_domain_build_info, so that libxl can handle. This patch is just to do this. Signed-off-by: Chunyan Liu <cyliu@suse.com> Index: libvirt-1.2.5/src/libxl/libxl_conf.c =================================================================== --- libvirt-1.2.5.orig/src/libxl/libxl_conf.c +++ libvirt-1.2.5/src/libxl/libxl_conf.c @@ -706,6 +706,15 @@ libxlMakeDomBuildInfo(virDomainObjPtr vm if (VIR_STRDUP(b_info->u.hvm.boot, bootorder) < 0) goto error; +#ifdef LIBXL_HAVE_BUILDINFO_KERNEL + if (VIR_STRDUP(b_info->cmdline, def->os.cmdline) < 0) + goto error; + if (VIR_STRDUP(b_info->kernel, def->os.kernel) < 0) + goto error; + if (VIR_STRDUP(b_info->ramdisk, def->os.initrd) < 0) + goto error; +#endif + if (def->nserials) { if (def->nserials > 1) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, @@ -750,6 +759,14 @@ libxlMakeDomBuildInfo(virDomainObjPtr vm virStringSplit(def->os.bootloaderArgs, " \t\n", 0))) goto error; } +#ifdef LIBXL_HAVE_BUILDINFO_KERNEL + if (VIR_STRDUP(b_info->cmdline, def->os.cmdline) < 0) + goto error; + if (VIR_STRDUP(b_info->kernel, def->os.kernel) < 0) + goto error; + if (VIR_STRDUP(b_info->ramdisk, def->os.initrd) < 0) + goto error; +#else if (VIR_STRDUP(b_info->u.pv.cmdline, def->os.cmdline) < 0) goto error; if (def->os.kernel) { @@ -760,6 +777,7 @@ libxlMakeDomBuildInfo(virDomainObjPtr vm } if (VIR_STRDUP(b_info->u.pv.ramdisk, def->os.initrd) < 0) goto error; +#endif } return 0; Index: libvirt-1.2.5/src/xenxs/xen_xm.c =================================================================== --- libvirt-1.2.5.orig/src/xenxs/xen_xm.c +++ libvirt-1.2.5/src/xenxs/xen_xm.c @@ -40,6 +40,10 @@ #include "virstoragefile.h" #include "virstring.h" +#if WITH_LIBXL +# include <libxl.h> +#endif + /* Convenience method to grab a long int from the config file object */ static int xenXMConfigGetBool(virConfPtr conf, const char *name, @@ -248,6 +252,28 @@ xenXMConfigGetUUID(virConfPtr conf, cons return 0; } +static int +xenParseCmdline(virConfPtr conf, virDomainDefPtr def) +{ + const char *extra, *root; + + if (xenXMConfigGetString(conf, "extra", &extra, NULL) < 0) + return -1; + + if (xenXMConfigGetString(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; +} + #define MAX_VFB 1024 /* * Turn a config record into a lump of XML describing the @@ -314,9 +340,25 @@ xenParseXM(virConfPtr conf, int xendConf if (hvm) { const char *boot; - if (xenXMConfigCopyString(conf, "kernel", &def->os.loader) < 0) +#ifdef LIBXL_HAVE_BUILDINFO_KERNEL + if (xenXMConfigCopyStringOpt(conf, "kernel", &def->os.kernel) < 0) + goto cleanup; + + if (def->os.kernel && strstr(def->os.kernel, "hvmloader")) { + /* 'kernel' set to 'hvmloader' will be ignored in libxl */ + VIR_FREE(def->os.kernel); + } + + if (xenXMConfigCopyStringOpt(conf, "ramdisk", &def->os.initrd) < 0) goto cleanup; + if (xenParseCmdline(conf, def) < 0) + goto cleanup; +#else + if (xenXMConfigCopyStringOpt(conf, "kernel", &def->os.loader) < 0) + goto cleanup; +#endif + if (xenXMConfigGetString(conf, "boot", &boot, "c") < 0) goto cleanup; @@ -339,8 +381,6 @@ xenParseXM(virConfPtr conf, int xendConf def->os.nBootDevs++; } } else { - const char *extra, *root; - if (xenXMConfigCopyStringOpt(conf, "bootloader", &def->os.bootloader) < 0) goto cleanup; if (xenXMConfigCopyStringOpt(conf, "bootargs", &def->os.bootloaderArgs) < 0) @@ -350,18 +390,8 @@ xenParseXM(virConfPtr conf, int xendConf goto cleanup; if (xenXMConfigCopyStringOpt(conf, "ramdisk", &def->os.initrd) < 0) goto cleanup; - if (xenXMConfigGetString(conf, "extra", &extra, NULL) < 0) - goto cleanup; - if (xenXMConfigGetString(conf, "root", &root, NULL) < 0) + if (xenParseCmdline(conf, def) < 0) goto cleanup; - - if (root) { - if (virAsprintf(&def->os.cmdline, "root=%s %s", root, extra) < 0) - goto cleanup; - } else { - if (VIR_STRDUP(def->os.cmdline, extra) < 0) - goto cleanup; - } } if (xenXMConfigGetULongLong(conf, "memory", &def->mem.cur_balloon,
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor