[libvirt] [PATCH] libxl: do not use hardcoded pygrub path

Jim Fehlig jfehlig at suse.com
Wed Aug 20 05:09:04 UTC 2014


On 08/19/2014 05:54 AM, Alvaro Lopez Garcia wrote:
> According to the Xen documentation the full path was only needed
> for versions prior to 4.1: "Note: For older versions of Xen Project
> software (4.1 or earlier) you need to know where in the filesystem
> pygrub lies. (...) Newer versions of the toolstack know how to look
> for the path themselves." [1]
>
> [1] http://wiki.xen.org/wiki/PyGrub
>
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1104695
> Signed-off-by: Alvaro Lopez Garcia <aloga at ifca.unican.es>
> ---
>   src/libxl/libxl_conf.c   | 13 +++++++++++--
>   src/libxl/libxl_conf.h   |  5 ++++-
>   src/libxl/libxl_domain.c |  2 +-
>   3 files changed, 16 insertions(+), 4 deletions(-)
>
> diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
> index 1210500..896ea8d 100644
> --- a/src/libxl/libxl_conf.c
> +++ b/src/libxl/libxl_conf.c
> @@ -100,6 +100,7 @@ libxlDriverConfigDispose(void *obj)
>       VIR_FREE(cfg->libDir);
>       VIR_FREE(cfg->saveDir);
>       VIR_FREE(cfg->autoDumpDir);
> +    VIR_FREE(cfg->bootloader);
>   }
>   
>   static int
> @@ -570,6 +571,7 @@ libxlMakeChrdevStr(virDomainChrDefPtr def, char **buf)
>   
>   static int
>   libxlMakeDomBuildInfo(virDomainDefPtr def,
> +                      libxlDriverConfigPtr cfg,
>                         libxl_ctx *ctx,
>                         libxl_domain_config *d_config)
>   {
> @@ -688,7 +690,7 @@ libxlMakeDomBuildInfo(virDomainDefPtr def,
>               if (VIR_STRDUP(b_info->u.pv.bootloader, def->os.bootloader) < 0)
>                   goto error;
>           } else if (def->os.kernel == NULL) {
> -            if (VIR_STRDUP(b_info->u.pv.bootloader, LIBXL_BOOTLOADER_PATH) < 0)
> +            if (VIR_STRDUP(b_info->u.pv.bootloader, cfg->bootloader) < 0)
>                   goto error;
>           }
>           if (def->os.bootloaderArgs) {
> @@ -1241,6 +1243,12 @@ libxlDriverConfigNew(void)
>       cfg->version = (cfg->verInfo->xen_version_major * 1000000) +
>           (cfg->verInfo->xen_version_minor * 1000);
>   
> +    /*
> +     * Versions prior to 4.2 need the full pygrub path
> +     */
> +    if (VIR_STRDUP(cfg->bootloader, cfg->version >= 4002000 ? LIBXL_BOOTLOADER : LIBXL_BOOTLOADER_PATH) < 0)
> +        goto error;

The libxl driver only supports Xen >= 4.2.

Regards,
Jim

> +
>       /* This will fill xenstore info about free and dom0 memory if missing,
>        * should be called before starting first domain */
>       if (libxl_get_free_memory(cfg->ctx, &free_mem)) {
> @@ -1399,6 +1407,7 @@ libxlMakeCapabilities(libxl_ctx *ctx)
>   int
>   libxlBuildDomainConfig(virPortAllocatorPtr graphicsports,
>                          virDomainDefPtr def,
> +                       libxlDriverConfigPtr cfg,
>                          libxl_ctx *ctx,
>                          libxl_domain_config *d_config)
>   {
> @@ -1407,7 +1416,7 @@ libxlBuildDomainConfig(virPortAllocatorPtr graphicsports,
>       if (libxlMakeDomCreateInfo(ctx, def, &d_config->c_info) < 0)
>           return -1;
>   
> -    if (libxlMakeDomBuildInfo(def, ctx, d_config) < 0)
> +    if (libxlMakeDomBuildInfo(def, cfg, ctx, d_config) < 0)
>           return -1;
>   
>       if (libxlMakeDiskList(def, d_config) < 0)
> diff --git a/src/libxl/libxl_conf.h b/src/libxl/libxl_conf.h
> index da66b4e..9d18c4b 100644
> --- a/src/libxl/libxl_conf.h
> +++ b/src/libxl/libxl_conf.h
> @@ -53,7 +53,8 @@
>   # define LIBXL_LIB_DIR LOCALSTATEDIR "/lib/libvirt/libxl"
>   # define LIBXL_SAVE_DIR LIBXL_LIB_DIR "/save"
>   # define LIBXL_DUMP_DIR LIBXL_LIB_DIR "/dump"
> -# define LIBXL_BOOTLOADER_PATH BINDIR "/pygrub"
> +# define LIBXL_BOOTLOADER "pygrub"
> +# define LIBXL_BOOTLOADER_PATH BINDIR "/" LIBXL_BOOTLOADER
>   
>   /* libxl interface for setting VCPU affinity changed in 4.5. In fact, a new
>    * parameter has been added, representative of 'VCPU soft affinity'. If one
> @@ -99,6 +100,7 @@ struct _libxlDriverConfig {
>       char *libDir;
>       char *saveDir;
>       char *autoDumpDir;
> +    char *bootloader;
>   };
>   
>   
> @@ -181,6 +183,7 @@ libxlCreateXMLConf(void);
>   int
>   libxlBuildDomainConfig(virPortAllocatorPtr graphicsports,
>                          virDomainDefPtr def,
> +                       libxlDriverConfigPtr cfg,
>                          libxl_ctx *ctx,
>                          libxl_domain_config *d_config);
>   
> diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
> index cdac82c..14f048a 100644
> --- a/src/libxl/libxl_domain.c
> +++ b/src/libxl/libxl_domain.c
> @@ -1199,7 +1199,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
>           VIR_FREE(managed_save_path);
>       }
>   
> -    if (libxlBuildDomainConfig(driver->reservedVNCPorts, vm->def,
> +    if (libxlBuildDomainConfig(driver->reservedVNCPorts, vm->def, cfg,
>                                  priv->ctx, &d_config) < 0)
>           goto endjob;
>   




More information about the libvir-list mailing list